创星网络[分享知识 传递快乐]

标题: php获取远程图片的两种方式 curl socket [打印本页]

作者: luinstein    时间: 2012-10-16 20:07
标题: php获取远程图片的两种方式 curl socket
方式一:Curl方式[已验证通过]
  1. <?php
  2. $url = "http://www.cxweb.com.cn/static/image/common/logo.png";
  3. $filename = 'curl.gif';
  4. //http://jb51.net
  5. getImg($url, $filename);
  6. /*
  7. *@通过curl方式获取制定的图片到本地
  8. *@ 完整的图片地址
  9. *@ 要存储的文件名
  10. */
  11. function getImg($url = "", $filename = "") {
  12. if(is_dir(basename($filename))) {
  13. echo "The Dir was not exits";
  14. Return false;
  15. }
  16. //去除URL连接上面可能的引号
  17. $url = preg_replace( '/(?:^[\'"]+|[\'"\/]+$)/', '', $url );
  18. $hander = curl_init();
  19. $fp = fopen($filename,'wb');
  20. curl_setopt($hander,CURLOPT_URL,$url);
  21. curl_setopt($hander,CURLOPT_FILE,$fp);
  22. curl_setopt($hander,CURLOPT_HEADER,0);
  23. curl_setopt($hander,CURLOPT_FOLLOWLOCATION,1);
  24. //curl_setopt($hander,CURLOPT_RETURNTRANSFER,false);//以数据流的方式返回数据,当为false是直接显示出来
  25. curl_setopt($hander,CURLOPT_TIMEOUT,60);
  26. curl_exec($hander);
  27. curl_close($hander);
  28. fclose($fp);
  29. Return true;
  30. }
  31. ?>
复制代码
二、方式二Soket
  1. <?php
  2. $a = "http://www.cxweb.com.cn/static/image/common/logo.png";
  3. $local = 'socket1.gif';
  4. $aa = getImg($a,$local);
  5. /*
  6. *@ 完整的图片地址
  7. *@ 要存储的文件名
  8. */
  9. function getImg( $url = "", $filename = "" ) {
  10. if(is_dir(basename($filename))) {
  11. echo "The Dir was not exits";
  12. Return false;
  13. }
  14. //去除URL连接上面可能的引号
  15. $url = preg_replace( '/(?:^[\'"]+|[\'"\/]+$)/', '', $url );
  16. if (!extension_loaded('sockets')) return false;
  17. //获取url各相关信息
  18. preg_match( '/http:\/\/([^\/\:]+(\:\d{1,5})?)(.*)/i', $url, $matches );
  19. if (!$matches) return false;
  20. $sock = socket_create( AF_INET, SOCK_STREAM, SOL_TCP );
  21. if ( ( $sock, $matches[1], $matches[2] ? substr($matches[2], 1 ) : 80 ) ) {
  22. return false;
  23. }
  24. //图片的相对地址
  25. $msg = 'GET ' . $matches[3] . " HTTP/1.1\r\n";
  26. //主机名称
  27. $msg .= 'Host: ' . $matches[1] . "\r\n";
  28. $msg .= 'Connection: Close' . "\r\n\r\n";
  29. socket_write( $sock, $msg );
  30. $bin = '';
  31. while ( $tmp = socket_read( $sock, 10 ) ) {
  32. $bin .= $tmp;
  33. $tmp = '';
  34. }
  35. $bin = explode("\r\n\r\n", $bin);
  36. $img = $bin[1];
  37. $h = fopen( $filename, 'wb' );
  38. $res = fwrite( $h, $img ) === false ? false : true;
  39. @socket_close( $sock );
  40. Return $res;
  41. }
  42. ?>
复制代码
from:http://hi.baidu.com/yhyynh/blog/ ... 84fbb68326acb6.html




欢迎光临 创星网络[分享知识 传递快乐] (http://bbs.cxweb.com.cn/) Powered by Discuz! X3