最近写项目,要对存储在七牛云的图片进行汉明码处理,需要把网络图片存储到本地再计算汉明码。但用PHP下载图片到本地还是遇到了一些坑点,记录一下解决的整个过程。
建立本地存储文件夹
在本地建立文件夹 mkdir /var/www/html/{your_project_name}/cache
给文件夹附最高读写权限 chmod 777 /var/www/html/project/cache/
。
这里要注意父文件夹的所有者应该与 nginx 或 Apache 使用的用户一致。
利用cURL下载文件
cURL
比 file_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下载网络图片到本地啦。