0

ダウンロードを php スクリプトで開始します。これは非常にシンプルで、次のようになります。

$dir = 'downloads/';
$type = 'application/x-rar-compressed, application/octet-stream, application/zip';

function makeDownload($file, $dir, $type) 
{   
    header("Content-Type: $type");
    header("Content-Disposition: attachment; filename=\"$file\"");
    readfile($dir.$file);
}

if(!empty($_GET['file']) && !preg_match('=/=', $_GET['file'])) {
    if(file_exists ($dir.$_GET['file']))     {
        makeDownload($_GET['file'], $dir, $type);
    }

}

win7 + ff/opera/chrome/safari では正常に動作しますが、MAC では file.rar/file.zip の代わりに file.rar.html または file.zip.html をダウンロードしようとします。

理由はありますか?

前もって感謝します

4

1 に答える 1

0

"application/x-rar-compressed, application/octet-stream, application/zip" は有効なファイル タイプではありません。スクリプトにロジックを追加してファイルの種類を検出し、特定のファイルの種類を提供する必要があります。例 (未テスト):

<?php
$dir = 'downloads/';

function makeDownload($file, $dir) 
{   
    switch(strtolower(end(explode(".", $file)))) {
      case "zip": $type = "application/zip"; break;
      case "rar": $type = "application/x-rar-compressed"; break;
      default: $type = "application/octet-stream";
    }
    header("Content-Type: $type");
    header("Content-Disposition: attachment; filename=\"$file\"");
    readfile($dir.$file);
    exit; // you should exit here to prevent the file from becoming corrupted if anything else gets echo'd after this function was called.
}

if(!empty($_GET['file']) && !preg_match('=/=', $_GET['file'])) {
    if(file_exists ($dir.$_GET['file']))     {
        makeDownload($_GET['file'], $dir);
    }

}
?>
于 2013-07-26T22:01:10.417 に答える