我有一個包含許多不同類型文件的文件夾。我需要顯示任何請求的文件,所以標題必須相應地進行調整。我試過是:動態生成標題以顯示請求的文件
header('Content-Type: ' . filetype('files/' . $file));
readfile('files/' . $file);
它爲JPG,PNG和GIF文件,但由於某種原因,MP3文件已經崩潰的瀏覽器,所以我想它不會爲每個文件類型的工作。該方法或代碼有什麼問題嗎?你會怎麼做?謝謝!
我有一個包含許多不同類型文件的文件夾。我需要顯示任何請求的文件,所以標題必須相應地進行調整。我試過是:動態生成標題以顯示請求的文件
header('Content-Type: ' . filetype('files/' . $file));
readfile('files/' . $file);
它爲JPG,PNG和GIF文件,但由於某種原因,MP3文件已經崩潰的瀏覽器,所以我想它不會爲每個文件類型的工作。該方法或代碼有什麼問題嗎?你會怎麼做?謝謝!
由PHP Documentation,filetype()
返回文件的類型。可能的值是fifo,char,dir,block,link,file,socket和unknown。
你想要的是文件的MIME類型。你想要的是Fileinfo。例如:
$finfo = finfo_open(FILEINFO_MIME_TYPE);
header("Content-Type: ".finfo_file($finfo, 'files/'.$file));
finfo_close($finfo);
readfile('files/'.$file);
您還可以快速嘗試mime_content_type,如果有的話,只是爲了確保沒有別的毛病系統。但是不建議這樣做,因爲它被刪除了。
使用這個MP3文件
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
你必須發送正確的MIME類型,並且可能會非常棘手。
您可以使用mime-content-type函數,但這是一個已棄用函數。
$mimetype = mime_content_type ($file);
header('Content-type: '. $mimetype);