我有一个使用readfile()下载大文件(1.3gb)的脚本。
如果我创建一个仅包含脚本的.php页面,它可以正常工作,但是如果我将相同的脚本放在一个代码片段中并将其放在页面上,则不会发生任何事情。
ModX是否阻止下载如何?任何建议都会非常感谢!
编辑代码:
$file = $_SERVER['DOCUMENT_ROOT']."/movie.mov";
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');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
};
答案 0 :(得分:0)
Modx确实具有最大文件大小设置[最大上载大小upload_maxsize],但这适用于文件管理器。我怀疑那是你的问题。
让我们看一下脚本和错误日志。
<强> 更新 强>
刚刚测试了你的小片段[进行了一些小改动]〜它工作正常。
$base_path = $modx->config['base_path'];
$movie = 'frankenweenie-mrwhiskers_r640s.mov';
$file = $base_path.$movie;
if (file_exists($file)) {
echo 'file exists '.filesize($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');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
return true;
}else{
echo 'file does not exist';
return false;
}
使用$ modx-&gt; config ['base_path']不是你的问题,它也使用服务器变量工作,这只是一个好习惯。因为返回的真/假modx期望它的片段返回true,false或$ output ...而且,不是你没有的问题。
开始查看你的php设置,我想可能内存限制可能是问题所在。检查php docs&amp;看看是否需要有足够的内存来读取大小的文件。 [尽管它表明'尺寸无关紧要']
启用脚本本身的错误记录&amp;检查服务器错误日志。
它适用于小文件?然后看这里:PHP readfile() and large downloads
祝你好运!