很奇怪。
我有一个脚本,通过浏览器将本地zip文件发送给用户。到目前为止,该脚本运行良好,没有任何问题。今天我的同事告诉我脚本正在发送零长度文件。
一些背景信息:
更新
is_readable()
返回1 $zip_file
包含文件路径$zip_name
包含zip名称error_reporting
On
(E_ALL
)没有显示任何内容相关代码段:
if (file_exists($zip_file)) {
header('Content-type: application/zip');
header('Content-disposition: filename="' . $zip_name . '"');
header("Content-length: " . filesize($zip_file));
readfile($zip_file);
exit();
}
我如何轻松调试?
提前致谢,fabrik
答案 0 :(得分:5)
http://www.php.net/manual/en/function.readfile.php#102137:
应该注意的是,在示例中:
header('Content-Length: ' . filesize($file));
$ file应该是文件的完整路径。否则,不会始终设置内容长度,这通常会导致可怕的“0字节文件”问题。
答案 1 :(得分:1)
我认为这里最大的问题是您发送文件的方式,您是否尝试过发送内容:
if (file_exists($zip_file))
{
header('Content-type: application/zip');
header('Content-disposition: filename="' . $zip_name . '"');
header("Content-length: " . filesize($zip_file));
$resource = fopen($zip_file,'r');
while(!feof($resource))
{
$chunk = fread($resource,4096);
//....
echo $chunk;
}
exit();
}
答案 2 :(得分:0)
尝试添加attachment;
并使用其他浏览器。
header('Content-disposition: attachment; filename="' . $zip_name . '"');
答案 3 :(得分:0)
我。瘸。错误。对不起。
一周前调整了代码并添加了:
if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) {
ob_start('ob_gzhandler');
} else {
ob_start();
}
造成这种异常的原因。 :(