用PHP下载网络图片到本地

Author Avatar
陈高勋 8月 02, 2016
  • 在其它设备中阅读本文章

最近写项目,要对存储在七牛云的图片进行汉明码处理,需要把网络图片存储到本地再计算汉明码。但用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源码:

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源码:

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下载网络图片到本地啦。