PHP下載采集圖片到本地的方法詳解【可忽略ssl認(rèn)證】
更新時間:2023年07月08日 09:02:37 作者:小龍?jiān)谏綎|
這篇文章主要介紹了PHP下載采集圖片到本地的方法,結(jié)合實(shí)例形式詳細(xì)分析了php基于Curl遠(yuǎn)程獲取遠(yuǎn)程圖片資源到本地的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
readfile和file_put_contents下載遠(yuǎn)程圖片到本地
<?php function download_image($pic_url) { $time = time(); $pic_local_path = dirname(__FILE__) . '/cache'; $pic_local = $pic_local_path . '/' . $time; if (!file_exists($pic_local_path)) { mkdir($pic_local_path, 0777); @chmod($pic_local_path, 0777); } ob_start(); //打開輸出 readfile($pic_url); //輸出圖片文件 $img = ob_get_contents(); //得到瀏覽器輸出 ob_end_clean(); //清除輸出并關(guān)閉 file_put_contents($pic_local, $img); return $pic_local; }
curl下載遠(yuǎn)程圖片到本地
<?php $ch = curl_init(); $fp=fopen('./girl.jpg', 'w'); curl_setopt($ch, CURLOPT_URL, "https://img02.sogoucdn.com/app/a/100520091/20181209114105"); curl_setopt($ch, CURLOPT_FAILONERROR, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 100); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_FILE, $fp); $output = curl_exec($ch); $info = curl_getinfo($ch); $error = curl_error($ch); fclose($fp); $size = filesize("./girl.jpg"); if ($size != $info['size_download']) { echo "下載失敗"; echo $error; } else { echo "下載成功"; } curl_close($ch);
/** * 下載遠(yuǎn)程圖片到本地 * * @param string $url 遠(yuǎn)程文件地址 * @param string $filename 保存后的文件名(為空時則為隨機(jī)生成的文件名,否則為原文件名) * @param array $fileType 允許的文件類型 * @param string $dirName 文件保存的路徑(路徑其余部分根據(jù)時間系統(tǒng)自動生成) * @param int $type 遠(yuǎn)程獲取文件的方式 * @return json 返回文件名、文件的保存路徑 * @author blog.snsgou.com */ function download_image($url, $fileName = '', $dirName, $fileType = array('jpg', 'gif', 'png'), $type = 1) { if ($url == '') { return false; } // 獲取文件原文件名 $defaultFileName = basename($url); // 獲取文件類型 $suffix = substr(strrchr($url, '.'), 1); if (!in_array($suffix, $fileType)) { return false; } // 設(shè)置保存后的文件名 $fileName = $fileName == '' ? time() . rand(0, 9) . '.' . $suffix : $defaultFileName; // 獲取遠(yuǎn)程文件資源 if ($type) { $ch = curl_init(); $timeout = 30; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $file = curl_exec($ch); curl_close($ch); } else { ob_start(); readfile($url); $file = ob_get_contents(); ob_end_clean(); } // 設(shè)置文件保存路徑 //$dirName = $dirName . '/' . date('Y', time()) . '/' . date('m', time()) . '/' . date('d', time()); $dirName = $dirName . '/' . date('Ym', time()); if (!file_exists($dirName)) { mkdir($dirName, 0777, true); } // 保存文件 $res = fopen($dirName . '/' . $fileName, 'a'); fwrite($res, $file); fclose($res); return array( 'fileName' => $fileName, 'saveDir' => $dirName ); }
PHP讀寫大 二進(jìn)制 文件
不必申請很大內(nèi)存(fopen、fread、fwrite、fclose)
<?php /** * 讀寫大二進(jìn)制文件,不必申請很大內(nèi)存 * 只有讀取到內(nèi)容才創(chuàng)建文件 * 保證目錄可寫 * * @param string $srcPath 源文件路徑 * @param string $dstPath 目標(biāo)文件路徑 * @return bool */ function fetch_big_file($srcPath, $dstPath) { set_time_limit(0); // 設(shè)置腳本執(zhí)行時間無限長 if (!$fpSrc = fopen($srcPath, "rb")) { return false; } $isWriteFileOpen = false; // 寫文件 是否已打開? do { $data = fread($fpSrc, 8192); // 每次讀取 8*1024個字節(jié) if (!$data) { break; } else if (!$isWriteFileOpen) { // 第一次讀取文件,并且有內(nèi)容,才創(chuàng)建文件 $fpDst = fopen($dstPath, "wb"); $isWriteFileOpen = true; fwrite($fpDst, $data); } else { // 寫入 fwrite($fpDst, $data); } } while (true); fclose($fpSrc); fclose($fpDst); return true; } $srcPath = 'd:/big.pdf'; $dstPath = 'Z:/big.pdf'; fetch_big_file($srcPath, $dstPath); echo 'success';
注:代碼說明
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
可忽略ssl認(rèn)證,對于圖片https協(xié)議失效的情況可以忽略驗(yàn)證,正常訪問。
同樣的,使用 file_get_contents
函數(shù)忽略https認(rèn)證的話可以使用如何代碼實(shí)現(xiàn):
$url = 'https://img02.sogoucdn.com/app/a/100520091/20181209114105'; $stream_opts = [ ? ? "ssl" => [ ? ? ? ? "verify_peer"=>false, ? ? ? ? "verify_peer_name"=>false, ? ? ] ]; $cdata = file_get_contents($url,false, stream_context_create($stream_opts));
您可能感興趣的文章:
- PHP多線程批量采集下載美女圖片的實(shí)現(xiàn)代碼(續(xù))
- PHP批量采集下載圖片的實(shí)現(xiàn)代碼
- php curl簡單采集圖片生成base64編碼(并附curl函數(shù)參數(shù)說明)
- PHP CURL采集百度搜尋結(jié)果圖片不顯示問題的解決方法
- php采集內(nèi)容中帶有圖片地址的遠(yuǎn)程圖片并保存的方法
- PHP遠(yuǎn)程采集圖片詳細(xì)教程
- PHP采集類Snoopy抓取圖片實(shí)例
- phpphp圖片采集后按原路徑保存圖片示例
- php采集文章中的圖片獲取替換到本地(實(shí)現(xiàn)代碼)
- PHP 文章中的遠(yuǎn)程圖片采集到本地的代碼
相關(guān)文章
php讀取二進(jìn)制流(C語言結(jié)構(gòu)體struct數(shù)據(jù)文件)的深入解析
本篇文章是對php讀取二進(jìn)制流(C語言結(jié)構(gòu)體struct數(shù)據(jù)文件)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06php中使用preg_replace函數(shù)匹配圖片并加上鏈接的方法
preg_replace 執(zhí)行正則表達(dá)式的搜索和替換,如果只是單純的匹配字符串建議使用str_replace(),因?yàn)槠鋱?zhí)行效率高的多2013-02-02PHP數(shù)組式訪問接口ArrayAccess用法分析
這篇文章主要介紹了PHP數(shù)組式訪問接口ArrayAccess用法,結(jié)合實(shí)例形式分析了數(shù)組式訪問接口ArrayAccess的概念、功能、實(shí)現(xiàn)與使用方法,需要的朋友可以參考下2017-12-12PHP實(shí)現(xiàn)多個關(guān)鍵詞搜索查詢功能示例
這篇文章主要介紹了PHP實(shí)現(xiàn)多個關(guān)鍵詞搜索查詢功能,結(jié)合實(shí)例形式分析了php使用mysql中l(wèi)ike、union等語句模糊查詢相關(guān)操作技巧,需要的朋友可以參考下2018-06-06