0

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

4

2 回答 2

1

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

于 2014-04-25T14:10:42.310 回答
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 中的值

于 2013-08-30T06:11:35.417 回答