ModX Evo:片段中的PHP readfile()?

时间:2012-10-09 00:35:14

标签: php download readfile modx modx-evolution

我有一个使用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;
};

1 个答案:

答案 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

祝你好运!