我正面临一个问题,我不确定这是否是正确的做法。我需要使用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吗?
再次感谢
答案 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'));