本文實例講述了php獲取遠程圖片并下載保存到本地的方法。分享給大家供大家參考,具體如下:
遠程圖片指的是遠端服務器上的數據我們可以通過php的許多函數來讀取下載了,這里整理了兩個可以自動下載遠程圖片并下載保存到本地的例子。
例1,可以自動識別圖片類型然后進行對應的保存
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
/* *功能:php完美實現下載遠程圖片保存到本地 *參數:文件url,保存文件目錄,保存文件名稱,使用的下載方式 *當保存文件名稱為空時則使用遠程文件原來的名稱 */ function getImage( $url , $save_dir = '' , $filename = '' , $type =0){ if (trim( $url )== '' ){ return array ( 'file_name' => '' , 'save_path' => '' , 'error' =>1); } if (trim( $save_dir )== '' ){ $save_dir = './' ; } if (trim( $filename )== '' ){ //保存文件名 $ext = strrchr ( $url , '.' ); if ( $ext != '.gif' && $ext != '.jpg' ){ return array ( 'file_name' => '' , 'save_path' => '' , 'error' =>3); } $filename =time(). $ext ; } if (0!== strrpos ( $save_dir , '/' )){ $save_dir .= '/' ; } //創建保存目錄 if (! file_exists ( $save_dir )&&! mkdir ( $save_dir ,0777,true)){ return array ( 'file_name' => '' , 'save_path' => '' , 'error' =>5); } //獲取遠程文件所采用的方法 if ( $type ){ $ch =curl_init(); $timeout =5; curl_setopt( $ch ,CURLOPT_URL, $url ); curl_setopt( $ch ,CURLOPT_RETURNTRANSFER,1); curl_setopt( $ch ,CURLOPT_CONNECTTIMEOUT, $timeout ); $img =curl_exec( $ch ); curl_close( $ch ); } else { ob_start(); readfile( $url ); $img =ob_get_contents(); ob_end_clean(); } //$size=strlen($img); //文件大小 $fp2 =@ fopen ( $save_dir . $filename , 'a' ); fwrite( $fp2 , $img ); fclose( $fp2 ); unset( $img , $url ); return array ( 'file_name' => $filename , 'save_path' => $save_dir . $filename , 'error' =>0); } |
例2,如果不是圖片會自動跳過
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
<?php function GrabImage( $url , $filename = "" ) { if ( $url == "" ): return false; endif ; //如果$url地址為空,直接退出 if ( $filename == "" ) { //如果沒有指定新的文件名 $ext = strrchr ( $url , "." ); //得到$url的圖片格式 if ( $ext != ".gif" && $ext != ".jpg" ): return false; endif ; //如果圖片格式不為.gif或者.jpg,直接退出 $filename = date ( "dMYHis" ) . $ext ; //用天月面時分秒來命名新的文件名 } ob_start(); //打開輸出 readfile( $url ); //輸出圖片文件 $img = ob_get_contents(); //得到瀏覽器輸出 ob_end_clean(); //清除輸出并關閉 $size = strlen ( $img ); //得到圖片大小 $fp2 = @ fopen ( $filename , "a" ); fwrite( $fp2 , $img ); //向當前目錄寫入圖片文件,并重新命名 fclose( $fp2 ); return $filename ; //返回新的文件名 } $img = GrabImage( "http://www.ythuaji.com.cn /6648d73db0edd1e89f3d62f7.jpg" , "" ); if ( $img ): echo '<pre><img src="' . $img . '"></pre>' ; //如果返回值為真,這顯示已經采集到服務器上的圖片 else : echo "false" ; endif ; //否則,輸出采集失敗 ?> |
其實上面的下載方式小編最喜歡的不是這兩個而是curl保存異步下載圖片會比較好。
希望本文所述對大家PHP程序設計有所幫助。