php下載遠程圖片到本地
阿新 • • 發佈:2017-09-09
base code lose spa new cti lena 下載 tran
在使用 PHP 做簡單的爬蟲的時候,我們經常會遇到需要下載遠程圖片的需求,所以下面來簡單實現這個需求
1:使用curl
比如我們有下面這兩張圖片:
$images = [ ‘https://img.alicdn.com/tps/TB1jjaYOFXXXXa2aXXXXXXXXXXX-276-402.jpg_150x10000q90.jpg‘, ‘https://img.alicdn.com/tfs/TB15QQ5cgMPMeJjy1XbXXcwxVXa-520-280.jpg_q90_.webp‘ ];
第一步,我們可以直接來使用最簡單的代碼實現:
function download($url, $path = ‘images/‘) {$ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何證書 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); }
1:封裝成一個類
縷清思路之後,我們可以將這個基本的功能封裝到一個類中:
class Spider { public function downloadImage($url, $path = ‘images/‘) { $ch= curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何證書 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); } }
或者,我們還可以這樣稍微優化一下:
class Spider { public function downloadImage($url, $path=‘images/‘) { $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何證書 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); } }
封裝成類之後,我們可以這樣調用代碼來下載圖片:
$spider = new Spider(); foreach ( $images as $url ) { $spider->downloadImage($url); }
這樣,對一般可訪問的遠程圖片下載就OK了....
php下載遠程圖片到本地