php获取远程图片的两种 CURL方式和sockets方式获取远程图片

  方式1:sockets

  

复制代码 代码如下:

  $a = "http://glzy8.com/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://glzy8.com/content/uploadfile/201106/thum-f3ccdd27d2000e3f9255a7e3e2c4880020110622095243.jpg";

  $filename = 'curl.gif';

  //http://glzy8.com

  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://glzy8.com/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;

  }

  ?>