【问题标题】:problem downloading file下载文件问题
【发布时间】:2009-02-23 17:23:10
【问题描述】:

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

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

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

【问题讨论】:

    标签: php download


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢 4 的建议。我将按照建议禁用输出压缩。关于错误的事情,它可能没有显示错误,因为我设置了 error_reporting(0) 。将其设置为显示所有错误,并让你知道我是否可以。
    • 修改了代码并禁用了压缩,它工作了。谢谢人
    【解决方案2】:

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

    在 php.ini 中:

    memory_limit = 32M
    max_execution_time = 300
    

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

    【讨论】:

    • 非常感谢您的快速回复。该站点托管在与 aplus.net 共享的托管包上。如果我能够编辑这些参数,我应该用什么来替换它。谢谢
    【解决方案3】:

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

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

    【讨论】:

    • 那么请检查您的服务器日志以查看发生了哪些服务器端 PHP 错误!
    • 哦,请务必禁用 IE 中的“显示友好的 HTTP 错误”设置!
    • 代码已托管在共享托管空间中。我可以访问服务器日志吗?
    【解决方案4】:

    试试这个:

    // 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-10
      • 2012-06-20
      • 2011-02-07
      • 2017-03-03
      • 2010-12-05
      • 2011-09-24
      • 1970-01-01
      相关资源
      最近更新 更多