1

我编写了一个脚本来强制从站点下载 mp3 文件。该代码运行良好,但问题是它无法下载大文件。我尝试使用 9.21mb 的文件并正确下载,但每当我尝试使用代码下载 25mb 的文件时,它只会给我一个找不到服务器页面或网站无法显示该页面。所以我现在知道下载大文件有问题。下面是下载文件的代码片段。

header("Pragma: public");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);             
header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=\"".$dname.".mp3\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($secretfile));
$downloaded=readfile($secretfile);  

显示的错误是:HTTP 500 Internal Server Error

非常感谢你们抽出宝贵的时间。

4

4 回答 4

2

它可能是内存限制,但通常 PHP 会输出一个错误,说明已达到内存限制。

此外,在所有这些之前,如果启用了输出压缩,您应该禁用它:

if(ini_get('zlib.output_compression')) {
    ini_set('zlib.output_compression', 'Off');
}

如果启用了输出压缩,有时 IE 可能会搞砸。

于 2009-02-23T17:32:10.300 回答
0

查看您的 PHP 配置以了解内存限制和超时

在 php.ini 中:

memory_limit = 32M
max_execution_time = 300

请注意,如果您想要非常长的执行时间,您还需要更改您的 Web 服务器超时。

于 2009-02-23T17:30:41.940 回答
0

我只是给了我一个找不到服务器页面或网站无法显示该页面

这是 Internet Explorer 显示的错误吗?您是否收到任何服务器端错误?你检查过你的服务器日志吗?

于 2009-02-23T17:35:46.217 回答
0

试试这个:

// empty output buffer
while (ob_get_level()) {
    ob_end_clean();
}
if (ini_get('output_buffering')) {
    ini_get('output_buffering', false);
}

// function to encode quoted-string tokens
function rfc2822_quoteString($string) {
    return '"'.preg_replace('/[^\x00-\x0C\x0E-\x21\x23-\x5B\x5D-\x7F]/', '\\\$0', $string).'"';
}

// HTTP headers
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.rfc2822_quoteString($dname.'.mp3'));
header('Content-Length: '.filesize($secretfile));

// send file
readfile($secretfile);
exit;
于 2009-02-23T18:00:00.077 回答