我有一个使用readfile()下载大文件(1.3)的脚本。
如果我创建了一个只包含脚本的.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;
};发布于 2012-10-09 09:04:17
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->config‘’base_path‘不是你的问题,它也可以使用服务器变量,这只是一个好习惯。返回true/false的modx期望它的代码片段返回true、false或$output……而且,这不是你的问题,它没有工作。
开始查看你的php设置,我想可能是内存限制的问题。查看php文档,看看它是否需要足够的内存来读取这种大小的文件。即使它表明“大小无关紧要”
在脚本本身中启用错误日志记录&检查服务器错误日志。
它能处理小文件吗?然后看看这里:PHP readfile() and large downloads
祝好运!
https://stackoverflow.com/questions/12791343
复制相似问题