本文实例讲述了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.zzvips.com /6648d73db0edd1e89f3d62f7.jpg" , "" );
if ( $img ): echo '<pre><img src="' . $img . '"></pre>' ;
//如果返回值为真,这显示已经采集到服务器上的图片
else : echo "false" ;
endif ;
//否则,输出采集失败
?>
|
其实上面的下载方式小编最喜欢的不是这两个而是curl保存异步下载图片会比较好。
希望本文所述对大家PHP程序设计有所帮助。