設置標題是我的下載網關的代碼,某些部分錯誤在PHP
if (!isset($_GET['f']) || empty($_GET['f'])) {die("<h1>URL Malfunction</h1><br/><p><i>Please Try Later</i>");}
if (strpos($_GET['f'], "\0") !== FALSE){ die("<h1>URL Malfunction</h1><br/><p><i>Please Try Later</i>");}
#Check URL, find resource Path
$fileName = basename($_GET['f']);
$file_path=(string)makeDownloadFilePath($fileName,"dir");
if(!is_file($file_path)){die("<h1>404 Not found</h1><br/><p><i>The resource you requested is not available</i>");}
$fileSize = filesize($file_path);
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public"); #Build Response#
header("Content-Description: File Transfer");
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=\"$fileName\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . $fileSize);
$file = @fopen($file_path,"rb");
if ($file) {
while(!feof($file)) { #File Transfer#
print(fread($file, 1024*8));
flush();
if (connection_status()!=0) {
@fclose($file);
die();
}
}
@fclose($file);
//The File is Downloaded . Closing Connections
我使用GET方法來接收文件名。文件名及其路徑將從網關生成。現在的問題是,當我點擊下載頁面,而不是顯示下載對話框時,瀏覽器只是將文件內容呈現爲屏幕上的文本。例如,我正在下載foo.mp3。二進制內容在屏幕上顯示爲怪異文本。它迴應瞭如下警告:我們不能更改標題。標題已發送到...
任何人都可以告訴,我犯了什麼錯誤?
感謝
這不是錯誤消息。只需將* real *錯誤消息複製並粘貼到Google,即可找到。 – mario
[Headers already sent]可能重複(http://stackoverflow.com/questions/2938777/headers-already-sent) – mario
錯誤信息?我只能在瀏覽器中看到該警告。那麼它開始將文件呈現爲文本 – Kris