【问题标题】:PHP Force Download - Gives 190byte filesPHP 强制下载 - 提供 190 字节的文件
【发布时间】:2013-08-29 14:05:26
【问题描述】:

一直试图让它工作一段时间,我已经阅读了一堆 SO 帖子。但是我都试过了,还是不行..

这是我现在正在尝试的代码:

header("Content-type: application/octet-stream");
header("Content-Length: " . filesize($_REQUEST['file']));
header("Content-Disposition: attachment; filename=".basename($_REQUEST['file']));

readfile($_REQUEST['file']);

但它不起作用。它适用于我的所有其他文件,但不适用于 .FLV。 它显示大小为 190 字节,它只保存一个 190 字节的文件。它确实有正确的网址,因为我可以在浏览器中输入网址并播放视频。

有什么想法吗?

我尝试了很多标题:

    header('Pragma: public'); // required   
    header("Content-Description: File Transfer");
    header("Content-Disposition: attachment; filename=".basename($_REQUEST['file']));
    header("Content-Type: video/mpeg");
    header("Content-Transfer-Encoding: binary");

    header("Content-Length: " . filesize($_REQUEST['file']));


    header('Cache-Control: must-revalidate, post-check=0, pre-check=0', false);
    header('Cache-Control: private', false); // required for certain browsers

我想要的是一个可以保存所有不同视频格式的savefile.php文件,还有zip、rar、exe等文件。如果有某种方式支持这一切,那就太好了,基于文件给出的文件扩展名......

编辑:


我什至尝试过使用 fopen,但没有任何效果。它显示 190 个字节,但我知道这个 url 是正确的。该文件有效(现在在 xampp 上进行本地测试,因此我可以轻松访问我的文件)

【问题讨论】:

    标签: php force-download


    【解决方案1】:

    您不应该更改内存限制 - 32-64 mb 几乎可以满足所有需求。 将您的 readfile($_REQUEST['file']); 更改为: $handle=fopen($_REQUEST['file'], 'rb'); while (!feof($handle)) { echo fread($handle, 8192); flush(); } fclose($handle); 这将读取 8kb 的文件,然后将其推送到客户端,依此类推……它不会消耗太多内存(因为它不会一次读取整个文件)。

    【讨论】:

    • 太棒了!有了这个解决方案,我们不需要增加内存限制!!
    • 是的,无论如何你都不应该提高它 - 在大多数共享服务器上你不能 - 而且这可能会导致问题 - 如果用户请求 500mb 文件怎么办?甚至更大。还要考虑根本不要以这种方式发送此类文件 - 因为在最大执行时间之后 - 传输无论如何都会被切断。
    • 是的,我知道! :) 这个解决方案的 tnks。
    【解决方案2】:

    啊,找到答案了。没有考虑打开 190 字节的 .flv 文件并检查其中的内容。出现错误消息:

    <br />
    <b>Fatal error</b>:  Allowed memory size of 134217728 bytes exhausted (tried to allocate  197980160 bytes) in <b>C:\xampp\htdocs\portfolio_003\savefile.php</b> on line <b>47</b><br />
    

    所以,我只需要更改 php.ini 中的值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      • 1970-01-01
      • 2012-09-19
      • 2013-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多