PHP下載/采集遠程圖片到本地

jopen 8年前發布 | 9K 次閱讀 PHP開發

PHP下載/采集遠程圖片到本地

01 / 02   下載遠程圖片到本地 03   04   @param string $url 遠程文件地址 05   @param string $filename 保存后的文件名(為空時則為隨機生成的文件名,否則為原文件名) 06   @param array $fileType 允許的文件類型 07   @param string $dirName 文件保存的路徑(路徑其余部分根據時間系統自動生成) 08   @param int $type 遠程獲取文件的方式 09   @return json 返回文件名、文件的保存路徑 10   @author blog.snsgou.com 11  / 12 function download_image($url, $fileName = '', $dirName, $fileType = array('jpg', 'gif', 'png'), $type = 1) 13 { 14     if ($url == '') 15     { 16         return false; 17     } 18   19     // 獲取文件原文件名 20     $defaultFileName = basename($url); 21   22     // 獲取文件類型 23     $suffix = substr(strrchr($url, '.'), 1); 24     if (!in_array($suffix, $fileType)) 25     { 26         return false; 27     } 28   29     // 設置保存后的文件名 30     $fileName = $fileName == '' ? time() . rand(0, 9) . '.' . $suffix : $defaultFileName; 31   32     // 獲取遠程文件資源 33     if ($type) 34     { 35         $ch = curl_init(); 36         $timeout = 30; 37         curl_setopt($ch, CURLOPT_URL, $url); 38         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 39         curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 40         $file = curl_exec($ch); 41         curl_close($ch); 42     } 43     else 44     { 45         ob_start(); 46         readfile($url); 47         $file = ob_get_contents(); 48         ob_end_clean(); 49     } 50   51     // 設置文件保存路徑 52     //$dirName = $dirName . '/' . date('Y', time()) . '/' . date('m', time()) . '/' . date('d', time()); 53     $dirName = $dirName . '/' . date('Ym', time()); 54     if (!file_exists($dirName)) 55     { 56         mkdir($dirName, 0777, true); 57     } 58   59     // 保存文件 60     $res = fopen($dirName . '/' . $fileName, 'a'); 61     fwrite($res, $file); 62     fclose($res); 63   64     return array( 65         'fileName' => $fileName, 66         'saveDir' => $dirName 67     ); 68 }     實戰經歷: 博客中有些圖片是直接引用其他網站的,這些天不知道咋地,估計是對方做了防盜鏈操作,導致博客中的圖片顯示不出來,沒辦法,只好用PHP批量采集下來,并且批量替換博文中的圖片地址: 01 / 02   批量下載博客中的圖片到本地 03  / 04 public function index() 05 { 06     global $_G; 07   08     $blogModel = model('Blog', 'blog'); 09     $list = $blogModel->order('gid desc')->limit(10)->findPage(); 10   11     $page = get_gpc('page') ? get_gpc('page') : 1; 12     $totalPages = $list['totalPages']; 13     $page = $page + 1; 14   15     if ($page > $totalPages) 16     { 17         die('更新完畢!'); 18     } 19   20     foreach ($list['data'] as $val) 21     { 22         $content = $val['content']; 23         $excerpt = $val['excerpt']; 24   25         $_G['isContentUpdate'] = $_G['isExcerptUpdate'] = false; 26   27         / 內容 / 28         $content = preg_replace_callback("/src=\"(http:\/\/images.cnblogs.com\/cnblogs_com[^\"]+)\"/", function($matches) { 29   30             global $_G; 31             $_G['isContentUpdate'] = true; 32   33             // 下載遠程圖片到本地 34             $res = download_image($matches[1], 'old', 'd:/PHP/xampp/htdocs/emlog/data/upload'); 35   36             // 返回 下載后的圖片url地址 37             return 'src="/data/upload/' . date('Ym', time()) . '/' . $res['fileName'] . '"'; 38   39         }, $content); 40   41         / 摘要 / 42         $excerpt = preg_replace_callback("/src=\"(http:\/\/images.cnblogs.com\/cnblogs_com[^\"]+)\"/", function($matches) { 43   44             global $_G; 45             $_G['isExcerptUpdate'] = true; 46   47             // 下載遠程圖片d到本地 48             $res = download_image($matches[1], 'old', 'd:/PHP/xampp/htdocs/emlog/data/upload'); 49   50             // 返回 下載后的圖片url地址 51             return 'src="/data/upload/' . date('Ym', time()) . '/' . $res['fileName'] . '"'; 52   53         }, $excerpt); 54   55         / 更新數據庫 / 56         $where = array( 57             'gid' => $val['gid'] 58         ); 59         $data = array(); 60   61         if ($_G['isContentUpdate']) 62         { 63             $data['content'] = $content; 64         } 65   66         if ($_G['isExcerptUpdate']) 67         { 68             $data['excerpt'] = $excerpt; 69         } 70   71         if ($data) 72         { 73             $blogModel->where($where)->save($data); 74         } 75     } 76   77     / 更新下一頁 / 78     $url = url('blog/Main/index', array('page' => $page)); 79     $msg = '正在更新' . $page . '/' . $totalPages; 80     redirect($url, 2, $msg); 81 }</pre>

 

來自: http://my.oschina.net/yonghan/blog/602485

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!