从 URL 将文件下载到服务器
好吧,这个看起来很简单,确实如此。要将文件下载到服务器,您所要做的就是:
file_put_contents("Tmpfile.zip", file_get_contents("http://someurl/file.zip"));
只有一个问题。如果你有一个大文件,比如100mb,该怎么办?然后,您将耗尽内存,并且无法下载该文件。
我想要的是一种在下载文件时将文件写入磁盘的方法。这样,我可以下载更大的文件,而不会遇到内存问题。
好吧,这个看起来很简单,确实如此。要将文件下载到服务器,您所要做的就是:
file_put_contents("Tmpfile.zip", file_get_contents("http://someurl/file.zip"));
只有一个问题。如果你有一个大文件,比如100mb,该怎么办?然后,您将耗尽内存,并且无法下载该文件。
我想要的是一种在下载文件时将文件写入磁盘的方法。这样,我可以下载更大的文件,而不会遇到内存问题。
从 PHP 5.1.0 开始,file_put_contents()
支持通过传递流句柄作为参数来逐个写入:$data
file_put_contents("Tmpfile.zip", fopen("http://someurl/file.zip", 'r'));
从手册中:
如果数据 [即第二个参数] 是流资源,则该流的剩余缓冲区将复制到指定的文件中。这与使用
stream_copy_to_stream() 类似
。
(谢谢哈克雷。
private function downloadFile($url, $path)
{
$newfname = $path;
$file = fopen ($url, 'rb');
if ($file) {
$newf = fopen ($newfname, 'wb');
if ($newf) {
while(!feof($file)) {
fwrite($newf, fread($file, 1024 * 8), 1024 * 8);
}
}
}
if ($file) {
fclose($file);
}
if ($newf) {
fclose($newf);
}
}