设为首页收藏本站
开启辅助访问
切换到宽版

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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

用新浪微博登录

只需一步,快速搞定

搜索
查看: 4186|回复: 0
打印 上一主题 下一主题

php获取远程图片的两种方式 curl socket

[复制链接]

我玩的应用:

跳转到指定楼层
楼主
发表于 2012-10-16 20:07:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
方式一: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
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|创星网络 ( 苏ICP备11027519号|网站地图  

GMT+8, 2024-9-22 06:59 , Processed in 0.082223 second(s), 22 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表