(. Onlar IE 8 kullanıyor olsa bile, bu yüzden kendi tarayıcılarını yükseltmek için onlara sormak benim için bir seçenek değil) ben internette bulunan ücretsiz bir script kullanarak ama bana Windows kullanıcıları ile sorun veriyor çalıştı İşte gereksinimleri bulunuyor:
- Microsoft Word ve sadece yetkili kullanıcılar indirebilir böylece korunması gereken pdf dosyaları bir grup var. Zaten giriş sistemi oluşturduk ve ben geçerli komut olmayan IE tarayıcıları için çalışıyor. Ancak, ben kendi dosya gayet alır Mac veya Linux ya da herhangi başka bir tarayıcı kullanıyorsanız, ya başka henüz bozuk ve herkes indirmek şikayet tutmak Windows kullanıcıları ile yinelenen sorunları alıyorum.
- Senaryo beni bir dizine dosyaları saklamak ancak işlev çağrısı üzerine dosya indirme zorlamak için izin vermelidir.
- En büyük tarayıcıları, özellikle IE ile iyi çalışması gerekir
Eğer herhangi bir uygulama öneri veya herhangi büyük bir komut biliyor (onlar ödenir bile, ben bu sorunun bıktım ve muhtemelen ücretli script için ödeyecekleri) varsa, o ölçüde önceden duyacağız.
İşte ben şu anda kullanıyorum fonksiyonunun kodu:
function output_file($file, $name, $mime_type=''){
if(!is_readable($file)) die('File not found or inaccessible!');
$size = filesize($file);
$name = rawurldecode($name);
/* Figure out the MIME type (if not specified) */
$known_mime_types=array(
"pdf" => "application/pdf",
"txt" => "text/plain",
"html" => "text/html",
"htm" => "text/html",
"exe" => "application/octet-stream",
"zip" => "application/zip",
"doc" => "application/msword",
"xls" => "application/vnd.ms-excel",
"ppt" => "application/vnd.ms-powerpoint",
"gif" => "image/gif",
"png" => "image/png",
"jpeg"=> "image/jpg",
"jpg" => "image/jpg",
"php" => "text/plain",
"rtf" => "application/rtf",
"csv" => "text/csv"
);
if($mime_type==''){
$file_extension = strtolower(substr(strrchr($file,"."),1));
if(array_key_exists($file_extension, $known_mime_types)){
$mime_type=$known_mime_types[$file_extension];
}else {
$mime_type="application/force-download";
};
};
@ob_end_clean(); //turn off output buffering to decrease cpu usage
// required for IE, otherwise Content-Disposition may be ignored
if(ini_get('zlib.output_compression'))
ini_set('zlib.output_compression', 'Off');
header('Content-Type: ' . $mime_type);
header('Content-Disposition: attachment; filename="'.$name.'"');
header("Content-Transfer-Encoding: binary");
header('Accept-Ranges: bytes');
/* The three lines below basically make the
download non-cacheable */
header("Cache-control: private");
header('Pragma: private');
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
// multipart-download and download resuming support
if(isset($_SERVER['HTTP_RANGE']))
{
list($a, $range) = explode("=",$_SERVER['HTTP_RANGE'],2);
list($range) = explode(",",$range,2);
list($range, $range_end) = explode("-", $range);
$range=intval($range);
if(!$range_end) {
$range_end=$size-1;
}else {
$range_end=intval($range_end);
}
$new_length = $range_end-$range+1;
header("HTTP/1.1 206 Partial Content");
header("Content-Length: $new_length");
header("Content-Range: bytes $range-$range_end/$size");
}else {
$new_length=$size;
header("Content-Length: ".$size);
}
/* output the file itself */
$chunksize = 1*(1024*1024); //you may want to change this
$bytes_send = 0;
if ($file = fopen($file, 'r'))
{
if(isset($_SERVER['HTTP_RANGE']))
fseek($file, $range);
while(!feof($file) &&
(!connection_aborted()) &&
($bytes_send<$new_length)
){
$buffer = fread($file, $chunksize);
print($buffer); //echo($buffer); // is also possible
flush();
$bytes_send += strlen($buffer);
}
fclose($file);
}else die('Error - can not open file.');
die();
}