用PHP下载网络图片到本地

最近写项目,要对存储在七牛云的图片进行汉明码处理,需要把网络图片存储到本地再计算汉明码。但用PHP下载图片到本地还是遇到了一些坑点,记录一下解决的整个过程。

建立本地存储文件夹

在本地建立文件夹 mkdir /var/www/html/{your_project_name}/cache

给文件夹附最高读写权限 chmod 777 /var/www/html/project/cache/

这里要注意父文件夹的所有者应该与 nginxApache 使用的用户一致。

利用cURL下载文件

cURLfile_get_contents 速度快了30%左右,而且服务器负载更低。故选择cURL方法下载文件。附:cURL参数选项

PHP源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
function http_get_data($url) {  
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_CUSTOMREQUEST, 'GET' );
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt ( $ch, CURLOPT_URL, $url );
ob_start ();
curl_exec ( $ch );
$return_content = ob_get_contents ();
ob_end_clean ();

$return_code = curl_getinfo ( $ch, CURLINFO_HTTP_CODE );
return $return_content;
}

存储图片文件

存储文件需要用 绝对路径 ,这里采用的是最简单的 fwrite 方法。

PHP源码:

1
2
3
4
5
6
7
8
9
10
function DownloadImage($key) {
$dir = '/var/www/html/{your_project_name}/cache/';
$file_name = $dir . $key . '.png';
$url = '{your_image_url}';

$return_content = http_get_data($url);
$fp = @fopen($file_name, 'a'); //将文件绑定到流
fwrite($fp,$return_content); //写入文件
fclose($fp);
}

至此,使用上述方法就可以用PHP下载网络图片到本地啦。

文章作者: 陈高勋
文章链接: https://nmchgx.com/php-image-download/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 陈高勋的博客