📜  使用PHP从 URL 下载文件(1)

📅  最后修改于: 2023-12-03 15:22:19.376000             🧑  作者: Mango

使用PHP从URL下载文件

在开发中,我们有时需要下载网络上的文件并保存在本地,PHP提供了多种方式实现该操作。本文将介绍一种使用PHP从URL下载文件的方法。

方法一:使用file_get_contents()函数

可以使用PHP内置的file_get_contents()函数下载网络文件。该函数将指定的URL文件读入一个字符串中,接着可以将这个字符串存为本地文件。

$url = 'http://example.com/file.zip';
$data = file_get_contents($url);
file_put_contents('/path/to/save/file.zip', $data);

该代码片段通过file_get_contents()读取文件内容到$data变量中,并通过file_put_contents()函数将读取到的数据写入指定路径的文件。

需要注意的是,该方法只适用于小文件的下载,当文件较大时,该方式会消耗更多的内存资源而导致脚本执行失败。

方法二:使用cURL扩展

cURL是一个常用的用于原始网络数据传输的工具。cURL扩展库需要安装并启用才能使用,该扩展提供了下载文件的接口,并支持大文件的下载。示例代码如下:

$url = 'http://example.com/file.zip';
$fp = fopen('/path/to/save/file.zip', 'w+');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_exec($ch);
curl_close($ch);
fclose($fp);

首先,打开一个文件流,将其传递给cURL的CURLOPT_FILE选项。然后,定义了一个一个cURL资源$ch,设置了我们刚刚定义的$file并启用了CURLOPT_FOLLOWLOCATION选项,使其可以重定向到实际的文件位置,最后执行cURL请求并关闭连接。

方法三:使用fopen()和stream_copy_to_stream()函数

fopen()和stream_copy_to_stream()函数也可以用来下载网络文件。

$url = 'http://example.com/file.zip';
$fp = fopen('/path/to/save/file.zip', 'w+');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
$data = curl_exec($ch);
fwrite($fp, $data);
fclose($fp);
curl_close($ch);

其中,CURLOPT_RETURNTRANSFER启用后,将返回的数据赋值给$data变量。CURLOPT_BINARYTRANSFER选项会将数据以二进制方式返回。通过fwrite()函数将数据写入到文件中。

结论

以上是三种使用PHP从URL下载文件的方法,各有优劣。文件较小时可以使用file_get_contents()实现,而cURL扩展和fopen()和stream_copy_to_stream()函数适合下载大文件。在实际开发中,应根据情况选择最适合的方法来下载文件。