需要php脚本在远程服务器上下载文件并保存在本地

Posted

技术标签:

【中文标题】需要php脚本在远程服务器上下载文件并保存在本地【英文标题】:Need php script to download a file on a remote server and save locally 【发布时间】:2011-05-29 02:24:49 【问题描述】:

尝试在远程服务器上下载文件并将其保存到本地子目录。

以下代码似乎适用于小于 1MB 的小文件,但较大的文件会超时,甚至无法开始下载。

<?php

 $source = "http://someurl.com/afile.zip";
 $destination = "/asubfolder/afile.zip";

 $data = file_get_contents($source);
 $file = fopen($destination, "w+");
 fputs($file, $data);
 fclose($file);

?>

关于如何不间断地下载更大的文件有什么建议吗?

【问题讨论】:

感谢您的回复。我在托管脚本的系统上没有 curl。 【参考方案1】:

一个更好更轻量级的流文件脚本:

<?php

$url  = 'http://example.com/file.zip'; //Source absolute URL
$path = 'file.zip'; //Patch & file name to save in destination (currently beside of PHP script file)

$fp = fopen($path, 'w');

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FILE, $fp);

$data = curl_exec($ch);

curl_close($ch);
fclose($fp);

?>

【讨论】:

如果 URL 是:filehippo.com/download_mozilla-firefox-64/post_download 请检查:***.com/questions/62835395/…【参考方案2】:

自 PHP 5.1.0 起,file_put_contents() 支持通过将流句柄作为 $data 参数传递来逐段写入:

file_put_contents("Tmpfile.zip", fopen("http://someurl/file.zip", 'r'));

【讨论】:

这是一个很棒的解决方案 - 工作快速简单 - 谢谢!【参考方案3】:

如果您不知道要下载的文件的格式,请使用此解决方案。

$url = 'http:://www.sth.com/some_name.format' ;
$parse_url = parse_url($url) ;
$path_info = pathinfo($parse_url['path']) ;
$file_extension = $path_info['extension'] ;
$save_path = 'any/local/path/' ;
$file_name = 'name' . "." . $file_extension ;
file_put_contents($save_path . $file_name , fopen($url, 'r'))

【讨论】:

【参考方案4】:

试试phpRFT:http://sourceforge.net/projects/phprft/files/latest/download?source=navbar

它有进度条和简单的文件名检测器...

【讨论】:

【参考方案5】:

我一直使用这个代码,效果很好。

<?php
define('BUFSIZ', 4095);
$url = 'Type The URL Of The File';
$rfile = fopen($url, 'r');
$lfile = fopen(basename($url), 'w');
while(!feof($rfile))
fwrite($lfile, fread($rfile, BUFSIZ), BUFSIZ);
fclose($rfile);
fclose($lfile);
?>     

【讨论】:

下一级答案【参考方案6】:
$ch = curl_init();
$source = "http://someurl.com/afile.zip";
curl_setopt($ch, CURLOPT_URL, $source);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec ($ch);
curl_close ($ch);

$destination = "/asubfolder/afile.zip";
$file = fopen($destination, "w+");
fputs($file, $data);
fclose($file);

【讨论】:

谢谢。我现在正在尝试,但浏览器似乎挂起。 @bigLarry 你必须等待文件下载,浏览器可能会挂起直到下载完成。尝试使用中等大小的文件,它会更快地完成,但大到足以达到超时 对于更大的文件使用这个http://***.com/a/3938564/1057527 以下更好的单行解决方案:***.com/a/37726077/179571 当我运行它时,我会显示文件,但大小为 0KB。其他方法给我错误的地址错误或 502 网关问题。有什么想法吗?【参考方案7】:

file_get_contents 不应该用于大型二进制文件,因为您很容易达到 PHP 的内存限制。我会 exec() wget 告诉它 URL 和所需的输出文件名:

exec("wget $url -O $filename");

【讨论】:

在支持 SSH 的主机上非常有用。只是如果你想从远程服务器获取一些文件到另一台服务器wget http://public-url-of-the-file 这样的网址呢? :filehippo.com/download_mozilla-firefox-64/post_download

以上是关于需要php脚本在远程服务器上下载文件并保存在本地的主要内容,如果未能解决你的问题,请参考以下文章

PHP:使用 DOMPDF 自动将动态 PDF 保存到远程服务器

PHP抓取远程图片到本地保存

php远程下载文件到本地,并进行编码转换

js如何保存文件

java 从服务器下载文件并保存到本地

java 从服务器下载文件并保存到本地