1

我正在尝试制作类似 ftp 的东西。我有一个在 wamp 上设置了应用程序的自制服务器。而且我不想将我的所有文件都保存在 wamp 文件夹中,所以我也可以从此应用程序中访问本地文件。

已经读过很多员工说我不能这样做,而且没有浏览器让我做这样的事情。但我设法做到了。

这是我用来下载文件的代码:

 function getFile($name,$path) {
    if(file_exists($path.$name)) {
        $name = urldecode($name);
        $fsize = filesize($path.$name); 

        header("Content-disposition: attachment; filename=\"".$name."\"");
        header("Content-type: application/force-download");
        header("Content-length: ".$fsize);

        echo file_get_contents($path.$name);
    }

它适用于小文件,无论它们有什么扩展名,但我还必须下载一些超过 200Mb 的 .exe 文件。

我已经在 php.ini 中设置了 memory_limit,因为这是我遇到的第一个麻烦的原因,但现在我得到了 ERROR:324。

任何想法如何克服它?

4

1 回答 1

0

file_get_contents 在内存中首先读取文件,然后返回它。对于 200MB 的文件大小,一个脚本需要超过 200MB 的内存。

要修复它,您应该逐块读取文件并输出它。

例如

$fp = fopen($path.$name, "rb");
if ($fp) {
    while(!feof($fp)) {
        $str = fread($fp, 1024);
        echo $str;
    }
    fclose($fp);
}
于 2012-12-14T11:45:21.897 回答