PHP readfile返回零长度文件

fab*_*rik 5 php readfile

这很奇怪.

我有一个脚本,通过浏览器将本地zip文件发送给用户.到目前为止,该脚本运行良好,没有任何问题.今天我的同事告诉我脚本正在发送零长度文件.

一些背景信息:

  • 在脚本出错之前,服务器设置尚未修改
  • 测试了不同的浏览器(在Chrome/Firefox上相同)
  • 以前的zip文件(之前工作正常)也是零长度的
  • 脚本在服务器上创建文件
  • 文件大小(在调试时回显)是正确的
  • 试图按照这里的建议调整服务器设置和脚本,但没有成功.

更新:

  • is_readable() 返回1
  • 文件大小可能在5Mb到100Mb之间变化(不是特定的)
  • $zip_file 保存文件路径
  • $zip_name 持有zip名称
  • 文件实际上是零长度(在文本编辑器中打开它不包含单个字节)
  • error_reportingOn(E_ALL)没有显示
  • 如果没有标题,浏览器会正确显示zip'source'
  • Safari说:' 0字节?无法解码原始数据的第一个有用(?)症状

有疑问的片段:

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();
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能轻松调试?

提前谢谢,fabrik

Tho*_*ers 5

http://www.php.net/manual/en/function.readfile.php#102137:

应该注意的是,在例子中:

header('Content-Length: ' . filesize($file));

$ file应该是文件的完整路径.否则将不会始终设置内容长度,通常会导致可怕的"0字节文件"问题.


fab*_*rik 0

我的。瘸。过错。对不起大家。

一周前刚刚调整了代码并添加了:

if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) {
    ob_start('ob_gzhandler');
} else {
    ob_start();
}
Run Code Online (Sandbox Code Playgroud)

是什么导致了这个异常。:(

  • 你做了什么来解决这个问题?您刚刚删除了 ob_gzhandler 回调吗? (2认同)