我正在使用 PHP 作为文件下载页面。这是问题代码的片段:
if (file_exists($attachment_location)) {
header($_SERVER["SERVER_PROTOCOL"] . " 200 OK");
header("Cache-Control: public"); // needed for i.e.
header("Content-Type: application/zip");
header("Content-Transfer-Encoding: Binary");
header("Content-Length:".filesize($attachment_location));
header("Content-Disposition: attachment; filename=file.zip");
readfile($attachment_location);
die("Hooray");
}
else {
die("Error: File not found.");
}
此代码在本地测试时工作得非常好,但在部署到实时服务器后,浏览器会返回“找不到页面”错误。我认为这可能是一个 .htaccess 问题,但实时服务器上的所有 .htaccess 文件都与它们的本地对应文件相同。我的下一个猜测是实时服务器的 PHP 配置,但我不知道什么 PHP 设置可能会导致这种行为。
file_exists() 函数总是返回 true - 我已经在实时服务器上检查了这个,它总是正确地获取文件、它的大小等,所以它确实有一个文件句柄。它只是不会执行下载!
主站点是一个 Wordpress 站点,但此代码不是 Wordpress 页面的一部分 - 它位于站点根目录中的独立目录中。
更新: is_file() 和 is_readable() 都为文件返回 true,所以这不是问题。导致问题的特定行是:
readfile($attachment_location)
在那之前的一切都非常快乐。