PHP下载远程图片
最简单的方法:
$image_url = 'http://xxxx.com/xxx.png';
$image_content = file_get_contents($image_url);
$save_path = '1.png';
file_put_contents($save_path, $image_content);
但是如果图片地址是有302跳转的或者gzip压缩或者需要登录状态才能下载,这时就需要用到curl来下载。
header方式传cookie和请求的资源有gzip:
$url = 'http://xxxx.com/xxx.png';
$headers = array(
'Referer: https://xxx.cn',
'Cookie: xxxxx'
);
$save_path = '1.png';
$tmp_file = tempnam(sys_get_temp_dir(), 'image'); // 创建临时文件
$resource = fopen($tmp_file, 'wb');
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($curl, CURLOPT_FILE, $resource);
curl_setopt($curl, CURLOPT_ENCODING, 'gzip'); // 如果请求的资源没有gzip则不需要这一行
curl_exec($curl);
curl_close($curl);
fclose($resource);
copy($tmp_file, $save_path);
@unlink($tmp_file);
cookie是通过传存文件方式请求:
$url = 'http://xxxx.com/xxx.png';
$headers = array(
'Referer: https://xxx.cn'
);
$cookie_path = 'test_cookie.txt'; // 如果是cookie文件方式,需要先获取cookie信息写入到文件,具体方法自行百度
$save_path = '1.png';
$tmp_file = tempnam(sys_get_temp_dir(), 'image'); // 创建临时文件
$resource = fopen($tmp_file, 'wb');
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_path); // cookie有2种方式,可以通过cookie文件或者直接在请求头写死cookie
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_path); // cookie有2种方式,可以通过cookie文件或者直接在请求头写死cookie
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($curl, CURLOPT_FILE, $resource);
curl_setopt($curl, CURLOPT_ENCODING, 'gzip'); // 如果请求的资源没有gzip则不需要这一行
curl_exec($curl);
curl_close($curl);
fclose($resource);
copy($tmp_file, $save_path);
@unlink($tmp_file);