PHP實現(xiàn)下載遠程圖片保存到本地的方法
在使用 PHP 做簡單的爬蟲的時候,我們經(jīng)常會遇到需要下載遠程圖片的需求,所以下面來簡單實現(xiàn)這個需求。
1.使用 curl
比如我們有下面這兩張圖片:
$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' ];
第一步,我們可以直接來使用最簡單的代碼實現(xiàn):
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); }
那在下載遠程圖片的時候就可以這樣:
foreach ( $images as $url ) { download($url); }
2.封裝一個類
縷清思路之后,我們可以將這個基本的功能封裝到一個類中:
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); } }
在者,我們還可以這樣稍微優(yōu)化一下:
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); }
封裝成類之后,我們可以這樣調(diào)用代碼來下載圖片:
$spider = new Spider(); foreach ( $images as $url ) { $spider->downloadImage($url); }
這樣,對付基本的遠程圖片下載就OK了。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
php+ajax導入大數(shù)據(jù)時產(chǎn)生的問題處理
介紹:就是想實現(xiàn)簡單的ajax上傳數(shù)據(jù),但是當數(shù)據(jù)量較大的時候,問題就一個一個接著來了,其實數(shù)據(jù)也不是很大,就是csv格式數(shù)據(jù) 不到5w條數(shù)據(jù)。大小5M,一開始認為這個很簡單,就是先上傳一下文件,然后讀取一下,存到數(shù)據(jù)庫就好了,結(jié)果,可能我比較菜,弄了半天做出這個功能。環(huán)境是linux.2014-06-06基于thinkPHP3.2實現(xiàn)微信接入及查詢token值的方法
這篇文章主要介紹了基于thinkPHP3.2實現(xiàn)微信接入及查詢tooken值的方法,結(jié)合實例形式分析了thinkPHP整合微信接口操作token值查詢的具體實現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-04-04destoon調(diào)用企業(yè)會員公司形象圖片的實現(xiàn)方法
這篇文章主要介紹了destoon調(diào)用企業(yè)會員公司形象圖片的實現(xiàn)方法,非常實用,需要的朋友可以參考下2014-08-08Laravel+jQuery實現(xiàn)AJAX分頁效果
這篇文章主要介紹了Laravel+jQuery實現(xiàn)AJAX分頁效果的方法,簡單介紹了jQuery的ajax調(diào)用結(jié)合Laravel控制器實現(xiàn)無刷新分頁功能的相關(guān)操作技巧,需要的朋友可以參考下2016-09-09TP5使用RabbitMQ實現(xiàn)消息隊列的項目實踐
本文主要介紹了TP5使用RabbitMQ實現(xiàn)消息隊列的項目實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-06-06