<?php
$fileName = 'upload/1.png';
$fileName = iconv('utf-8', 'gb2312', $fileName);
$fp = fopen($fileName, 'r+');
if(!file_exists($fileName)){
echo 'file not';
exit();
}
$file_size = filesize($fileName);
// 返回文件
Header('Content-type: application/octet-stream');
// 告訴客戶端瀏覽器返回的文件大小是按照字節(jié)進(jìn)行計(jì)算
Header('Accept-Ranges: bytes');
// 返回文件的大小
Header('Accept-Length:'.$file_size);
// 彈出客戶端的對話框,顯示對應(yīng)的文件名
Header('Content-Disposition: attachment; filename='.$filename);
// 防止服務(wù)器壓力過大,分段讀取
$buffer = 1024;
while (!feof($fp)) {
$file_data = fread($fp, length);
echo $file_data;
}
fclose($fp);
這段代碼執(zhí)行好,瀏覽器彈出的是下載當(dāng)前php文件的框?
不知是什么原因造成的?
2 回答

慕尼黑8549860
TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊
$filename 文件名使用錯(cuò)誤,上邊定義的是 $fileName
還有 length 就沒有定義,應(yīng)該使用 $buffer 變量
修改后如下
$fileName = 'upload/1.png';
$fileName = iconv('utf-8', 'gb2312', $fileName);
$fp = fopen($fileName, 'r+');
if(!file_exists($fileName)){
echo 'file not';
exit();
}
$file_size = filesize($fileName);
// 返回文件
Header('Content-type: application/octet-stream');
// 告訴客戶端瀏覽器返回的文件大小是按照字節(jié)進(jìn)行計(jì)算
Header('Accept-Ranges: bytes');
// 返回文件的大小
Header('Accept-Length:'.$file_size);
// 彈出客戶端的對話框,顯示對應(yīng)的文件名
Header('Content-Disposition: attachment;filename='.$fileName);
// 防止服務(wù)器壓力過大,分段讀取
$buffer = 1024;
while (!feof($fp)) {
$file_data = fread($fp, $buffer);
echo $file_data;
}
fclose($fp);
還有你這樣并不能實(shí)現(xiàn)分段下載,如果要想實(shí)現(xiàn)請參考
HTTP/1.1 206 Partial Content 狀態(tài)碼

撒科打諢
TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊
你這是個(gè)死循環(huán)吧。
filename
變量未定義(大小寫)length
是什么鬼,哪兒定義的
把這兩個(gè)修復(fù)了就能正常工作了
- 2 回答
- 0 關(guān)注
- 653 瀏覽
添加回答
舉報(bào)
0/150
提交
取消