将文件从url复制到我自己的服务器仍然是0mb的文件

时间:2014-10-22 20:01:24

标签: php copy filesize fread

我正面临一个问题,我不确定这是否是正确的做法。我需要使用php将文件从远程服务器复制到我的服务器。 我使用以下脚本:

public function download($file_source, $file_target) {
    $rh = fopen($file_source, 'rb');
    $wh = fopen($file_target, 'w+b');
    if (!$rh || !$wh) {
        return false;
    }

    while (!feof($rh)) {
        if (fwrite($wh, fread($rh, 4096)) === FALSE) {
            return false;
        }
        echo ' ';
        flush();
    }

    fclose($rh);
    fclose($wh);

    return true;
}

但最后,文件大小保持为0。

编辑:我更新了我的问题,因为还有一些我不明白的事情: 关于fread,我使用了2048mb。但它没有用。 我找到了上面的脚本,它使用了4096mb。

我的问题:如何确定使用哪个内存(?)以便随时无法下载文件?因为这个工作在特定的机器上(专用),但它会在共享主机上,如果我不能修改php.ini吗?

再次感谢

1 个答案:

答案 0 :(得分:1)

filesize()需要文件名/路径。你传入一个文件句柄,这意味着文件大小将失败并返回一个布尔值假。

然后你使用false作为你的fread的size参数,它被转换为整数0.所以基本上你坐在那里告诉php读取一个文件,一次0个字节。

无论如何都无法可靠地获取远程文件的大小,因此只需要固定一些固定数量的字节,例如: 2048年,一次。

while(!feof($handle)) {
   $contents = fread($handle, 2048);
   fwrite($f, $contents);
}

如果该文件不是太大和/或您的PHP可以处理它:

file_put_contents('local.mp4', file_get_contents('http://whatever/foo.mp4'));