方式1:sockets
$a = "http://jb51.net/content/uploadfile/201106/thum-f3ccdd27d2000e3f9255a7e3e2c4880020110622095243.jpg"; $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; }
方式2:curl
<?php $url = "http://jb51.net/content/uploadfile/201106/thum-f3ccdd27d2000e3f9255a7e3e2c4880020110622095243.jpg"; $filename = 'curl.gif'; //http://jb51.net 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://jb51.net/content/uploadfile/201106/thum-f3ccdd27d2000e3f9255a7e3e2c4880020110622095243.jpg', 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; } ?>
|