Rob*_*ert 5 php malformed http-headers
我有一个现在已有几年的网站,它基本上提供下载.
无论如何,因为移动服务器的人无法下载文件,因为它现在给出错误500错误,并且在日志文件中它带来了这个错误:
来自脚本的格式错误的标题 错误的标头= 1:index.php
我能看到的与此相关的唯一代码是:
// Echo $productOptionDetails->file;
$file = DOWNLOAD_FOLDER. '/'. $productOptionDetailEntity->file;
if (file_exists($file)) {
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) + 1);
ob_clean();
flush();
readfile($file);
exit;
}
Run Code Online (Sandbox Code Playgroud)
现在如果我输出:
// Echo $productOptionDetails->file;
$file = DOWNLOAD_FOLDER. '/'. $productOptionDetailEntity->file;
if (file_exists($file)) {
readfile($file);
exit;
}
Run Code Online (Sandbox Code Playgroud)
它会输出大量加密文本,因此它显然可以阅读.
我读过的是标题不正确但在阅读了php.net以及其他网站中的内容后,这看起来很好.
任何人都可以大声说出我为什么会收到这些错误?
谢谢
问题在于
header('Content-Length: ' . filesize($file) + 1);
Run Code Online (Sandbox Code Playgroud)
在加号之前评估点,因此您的代码是字符串+ 1,结果是1,这导致1作为标题发送.应该是正确的代码
header('Content-Length: ' . filesize($file));
Run Code Online (Sandbox Code Playgroud)
因为根据这个页面http://www.php.net/manual/en/function.readfile.php没有使用+1.其他解决方案是
header('Content-Length: ' . (filesize($file) + 1));
Run Code Online (Sandbox Code Playgroud)
这将按你的意愿工作.
| 归档时间: |
|
| 查看次数: |
11407 次 |
| 最近记录: |