PHP远程下载图片保存到本地的方法[demo]

你的名字 2022-05-21 11:18 367阅读 0赞

本篇文章主要介绍了PHP远程下载图片保存到本地的方法,现在分享给大家,给大家做个参考。

在使用 PHP 做简单的爬虫的时候,我们经常会遇到需要下载远程图片的需求,所以下面来简单实现这个需求。

1.使用 curl

比如我们有下面这两张图片:










1


2


3


4



$images = [


‘https://dn-laravist.qbox.me/2015-09-22_00-17-06j.png‘,


‘https://dn-laravist.qbox.me/2015-09-23_00-58-03j.png‘


];

第一步,我们可以直接来使用最简单的代码实现:










1


2


3


4


5


6


7


8


9


10


11


12


13



function download($url, $path = ’images/‘)


{


$ch = curl_init();


curl_setopt($ch, CURLOPT_URL, $url);


curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);


curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);


$file = curl_exec($ch);


curl_close($ch);


$filename = pathinfo($url, PATHINFO_BASENAME);


$resource = fopen($path . $filename, ’a’);


fwrite($resource, $file);


fclose($resource);


}

那在下载远程图片的时候就可以这样:










1


2


3



foreach ( $images as $url ) {


download($url);


}

2.封装一个类

缕清思路之后,我们可以将这个基本的功能封装到一个类中:










1


2


3


4


5


6


7


8


9


10


11


12


13


14


15


16



class Spider {



public function downloadImage($url, $path = ’images/‘)


{


$ch = curl_init();


curl_setopt($ch, CURLOPT_URL, $url);


curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);


curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);


$file = curl_exec($ch);


curl_close($ch);


$filename = pathinfo($url, PATHINFO_BASENAME);


$resource = fopen($path . $filename, ’a’);


fwrite($resource, $file);


fclose($resource);


}


}

在者,我们还可以这样稍微优化一下:










1


2


3


4


5


6


7


8


9


10


11


12


13


14


15


16


17


18


19



public function downloadImage($url, $path=’images/‘)


{


$ch = curl_init();


curl_setopt($ch, CURLOPT_URL, $url);


curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);


curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);


$file = curl_exec($ch);


curl_close($ch);



$this->saveAsImage($url, $file, $path);


}



private function saveAsImage($url, $file, $path)


{


$filename = pathinfo($url, PATHINFO_BASENAME);


$resource = fopen($path . $filename, ’a’);


fwrite($resource, $file);


fclose($resource);


}

封装成类之后,我们可以这样调用代码来下载图片:










1


2


3


4


5



$spider = new Spider();



foreach ( $images as $url ) {


$spider->downloadImage($url);


}

这样,对付基本的远程图片下载就OK了。

发表评论

表情:
评论列表 (有 0 条评论,367人围观)

还没有评论,来说两句吧...

相关阅读

    相关 js保存图片本地

    说明:可以实现下载图片,但是移动端浏览器不行,暂时没有实现,如果有知道的大哥留个言,让我改进一下,感谢。 操作步骤: 新建一个文件夹,将代码放入index.html,然后在文

    相关 PHP抓取远程图片本地保存

    最近在工作中需要开发了一个用户素材功能,里面需要将网上的各种图片素材进行本地化存储。于是在网上找了一些相关资料,并根据自身开发需要,整理了一下主要的逻辑代码。 /