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


Posted in PHP onNovember 07, 2011

方式1:sockets

$a = "http://3water.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://3water.com/content/uploadfile/201106/thum-f3ccdd27d2000e3f9255a7e3e2c4880020110622095243.jpg"; 
$filename = 'curl.gif'; 
//http://3water.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://3water.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; 
} 
?>
PHP 相关文章推荐
如何限制访问者的ip(PHPBB的代码)
Oct 09 PHP
利用static实现表格的颜色隔行显示
Oct 09 PHP
php 5.3.5安装memcache注意事项小结
Apr 12 PHP
探讨PHP中this,self,parent的区别详解
Jun 08 PHP
thinkPHP查询方式小结
Jan 09 PHP
PHP实现的简单分页类及用法示例
May 06 PHP
thinkphp框架实现删除和批量删除
Jun 29 PHP
自制PHP框架之设计模式
May 07 PHP
laravel 5.3中自定义加密服务的方案详解
May 09 PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 PHP
PHP高并发和大流量解决方案整理
Dec 24 PHP
PHP 数组操作详解【遍历、指针、函数等】
May 13 PHP
php数组函数序列之array_pop() - 删除数组中的最后一个元素
Nov 07 #PHP
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
Nov 07 #PHP
php数组函数序列之array_unshift() 在数组开头插入一个或多个元素
Nov 07 #PHP
php数组函数序列之array_flip() 将数组键名与值对调
Nov 07 #PHP
php数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。
Nov 07 #PHP
php数组函数序列之array_splice() - 在数组任意位置插入元素
Nov 07 #PHP
php数组函数序列之in_array() - 查找数组中是否存在指定值
Nov 07 #PHP
You might like
php实现的短网址算法分享
2014/06/20 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
2014/07/29 PHP
PHP 实现浏览记录并按日期分组
2017/05/11 PHP
JavaScript子类用Object.getPrototypeOf去调用父类方法解析
2013/12/05 Javascript
关于编写性能高效的javascript事件的技术
2014/11/28 Javascript
推荐一个自己用的封装好的javascript插件
2015/01/29 Javascript
浅谈JS原生Ajax,GET和POST
2016/06/08 Javascript
浅谈js中几种实用的跨域方法原理详解
2016/12/02 Javascript
教你用十行node.js代码读取docx的文本
2017/03/08 Javascript
详解Vue中使用v-for语句抛出错误的解决方案
2017/05/04 Javascript
JavaScript实现换肤功能
2017/09/15 Javascript
NodeJS 中Stream 的基本使用
2018/07/30 NodeJs
JS实现电脑虚拟键盘打字测试
2020/06/24 Javascript
[01:10]为家乡而战!完美世界城市挑战赛全国总决赛花絮
2019/07/25 DOTA
Python functools模块学习总结
2015/05/09 Python
python进阶之多线程对同一个全局变量的处理方法
2018/11/09 Python
Python随机生成身份证号码及校验功能
2018/12/04 Python
python 根据时间来生成唯一的字符串方法
2019/01/14 Python
零基础使用Python读写处理Excel表格的方法
2019/05/02 Python
对Python 简单串口收发GUI界面的实例详解
2019/06/12 Python
Python使用Socket实现简单聊天程序
2020/02/28 Python
使用Python将Exception异常错误堆栈信息写入日志文件
2020/04/08 Python
Python OpenCV读取中文路径图像的方法
2020/07/02 Python
Python eval函数介绍及用法
2020/11/09 Python
Kaufmann Mercantile官网:家居装饰、配件、户外及更多
2018/09/28 全球购物
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
C语言中break与continue的区别
2012/07/12 面试题
十佳美德少年事迹材料
2014/02/05 职场文书
幼儿园教学随笔感言
2014/02/23 职场文书
我的求职择业计划书
2014/04/04 职场文书
社区优秀志愿者先进事迹
2014/05/09 职场文书
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
党员违纪检讨书
2015/05/05 职场文书
志愿者工作心得体会
2016/01/15 职场文书
司法廉洁教育心得体会
2016/01/20 职场文书
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang