PHP Force Download - 提供190byte文件

时间:2013-08-29 14:05:26

标签: php force-download

现在试图让它工作一段时间,我已经阅读了一堆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本地测试,所以我可以轻松访问我的文件)

2 个答案:

答案 0 :(得分:1)

你不应该改变内存限制 - 对于几乎所有东西来说,32-64 mb就足够了。 将您的readfile($_REQUEST['file']);更改为: $handle=fopen($_REQUEST['file'], 'rb'); while (!feof($handle)) { echo fread($handle, 8192); flush(); } fclose($handle); 这将读取8kb的文件,然后将其推送到客户端,依此类推......它将消耗不多的内存(因为它不能一次读取整个文件)。

答案 1 :(得分:0)

啊,找到了答案..没想到打开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中的值