PHP获取远程图片的两种简单方式

2012年12月23日 发表评论 阅读评论

第一种:curl

$url = "http://thinkphp.cn/Public/Uploads/thinkphp_ad01.gif";

$filename = 'curl.gif';

getImg($url, $filename);

/*
  *@通过curl方式获取制定的图片到本地
  *@ 完整的图片地址
  *@ 要存储的文件名
 */
function getImg($url = "", $filename = "") {
	if(is_dir(basename($filename))) {
		echo "The Dir was not exits";
		Return false;
	}
	//去除URL连接上面可能的引号
	$url = preg_replace( '/(?:^[\'"]+|[\'"\/]+$)/', '', $url );

	$hander = curl_init();
	$fp = fopen($filename,'wb');

	curl_setopt($hander,CURLOPT_URL,$url);
	curl_setopt($hander,CURLOPT_FILE,$fp);
	curl_setopt($hander,CURLOPT_HEADER,0);
	curl_setopt($hander,CURLOPT_FOLLOWLOCATION,1);
	//curl_setopt($hander,CURLOPT_RETURNTRANSFER,false);//以数据流的方式返回数据,当为false是直接显示出来
	curl_setopt($hander,CURLOPT_TIMEOUT,60);

	/*$options = array(
		CURLOPT_URL=> 'http://thinkphp.cn/Public/Uploads/thinkphp_ad01.gif',
		CURLOPT_FILE => $fp,
		CURLOPT_HEADER => 0,
		CURLOPT_FOLLOWLOCATION => 1,
		CURLOPT_TIMEOUT => 60
	);
	curl_setopt_array($hander, $options);
	*/

	curl_exec($hander);
	curl_close($hander);
	fclose($fp);
	Return true;
}

第二种:sockets


$a = "http://thinkphp.cn/Public/Uploads/thinkphp_ad01.gif";

$local = 'socket1.gif';

$aa = getImg($a,$local);

/*
  *@ 完整的图片地址
  *@ 要存储的文件名
 */
function getImg( $url = "", $filename = "" ) {
	if(is_dir(basename($filename))) {
		echo "The Dir was not exits";
		Return false;
	}
	//去除URL连接上面可能的引号
	$url = preg_replace( '/(?:^[\'"]+|[\'"\/]+$)/', '', $url );
	if (!extension_loaded('sockets')) return false;
	//获取url各相关信息
	preg_match( '/http:\/\/([^\/\:]+(\:\d{1,5})?)(.*)/i', $url, $matches );
	if (!$matches) return false;
	$sock = socket_create( AF_INET, SOCK_STREAM, SOL_TCP );
	if ( !@socket_connect( $sock, $matches[1], $matches[2] ? substr($matches[2], 1 ) : 80 ) ) {
		return false;
	}
	//图片的相对地址
	$msg = 'GET ' . $matches[3] . " HTTP/1.1\r\n";
	//主机名称
	$msg .= 'Host: ' . $matches[1] . "\r\n";
	$msg .= 'Connection: Close' . "\r\n\r\n";
	socket_write( $sock, $msg );
	$bin = '';
	while ( $tmp = socket_read( $sock, 10 ) ) {
		$bin .= $tmp;
		$tmp = '';
	}
	$bin = explode("\r\n\r\n", $bin);
	$img = $bin[1];
	$h = fopen( $filename, 'wb' );
	$res = fwrite( $h, $img ) === false ? false : true;
	@socket_close( $sock );
	Return $res;
}


转载请注明来自:[MSN Spaces]http://msn.shandian.biz/488.html

  1. 本文目前尚无任何评论.