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 相关文章推荐
使用adodb lite解决问题
Dec 31 PHP
PHP 单引号与双引号的区别
Nov 24 PHP
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
Feb 16 PHP
The specified CGI application misbehaved by not returning a complete set of HTTP headers
Mar 31 PHP
PHP生成RSS文件类实例
Dec 05 PHP
php的ddos攻击解决方法
Jan 08 PHP
使用Huagepage和PGO来提升PHP7的执行性能
Nov 30 PHP
php简单实现多语言切换的方法
May 09 PHP
深入分析PHP优化及注意事项
Jul 04 PHP
关于PHP通用返回值设置方法
Mar 31 PHP
PHP echo()函数讲解
Feb 15 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
May 26 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的无刷新操作实现方法分析
2020/02/28 PHP
jquery 分页控件实现代码
2009/11/30 Javascript
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
javascript提取URL的搜索字符串中的参数(自定义函数实现)
2013/01/22 Javascript
Jquery幻灯片特效代码分享--鼠标点击按钮时切换(1)
2015/08/15 Javascript
AngularJS入门心得之directive和controller通信过程
2016/01/25 Javascript
浅谈js中的延迟执行和定时执行
2016/05/31 Javascript
AngularJS入门教程之模块化操作用法示例
2016/11/02 Javascript
详解ECharts使用心得总结
2016/12/06 Javascript
获取今天,昨天,本周,上周,本月,上月时间(实例分享)
2017/01/04 Javascript
利用Node.js编写跨平台的spawn语句详解
2017/02/12 Javascript
angularjs+bootstrap实现自定义分页的实例代码
2017/06/19 Javascript
bootstrap-table实现服务器分页的示例 (spring 后台)
2017/09/01 Javascript
微信小程序模板(template)使用详解
2018/01/31 Javascript
微信小程序遍历Echarts图表实现多个饼图
2019/04/25 Javascript
微信小程序地图绘制线段并且测量(实例代码)
2020/01/02 Javascript
vue 点击其他区域关闭自定义div操作
2020/07/17 Javascript
[04:09]显微镜下的DOTA2第十二期—NaVi美如画的团战
2014/06/23 DOTA
Python设计模式之观察者模式实例
2014/04/26 Python
python中global与nonlocal比较
2014/11/21 Python
举例讲解Python中is和id的用法
2015/04/03 Python
Python实现查找匹配项作处理后再替换回去的方法
2017/06/10 Python
python版本坑:md5例子(python2与python3中md5区别)
2017/06/20 Python
详解python 拆包可迭代数据如tuple, list
2017/12/29 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
2018/04/19 Python
python 用 xlwings 库 生成图表的操作方法
2019/12/22 Python
python 实现分组求和与分组累加求和代码
2020/05/18 Python
从python读取sql的实例方法
2020/07/21 Python
Matplotlib 折线图plot()所有用法详解
2020/07/28 Python
CSS3中的5个有趣的新技术
2009/04/02 HTML / CSS
css3制作动态进度条以及附加jQuery百分比数字显示
2012/12/13 HTML / CSS
意大利制造的男鞋和女鞋:SCAROSSO
2018/03/07 全球购物
狼和鹿教学反思
2014/02/05 职场文书
Python的flask接收前台的ajax的post数据和get数据的方法
2021/04/12 Python
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技
分享很少见很有用的SQL功能CORRESPONDING
2022/08/05 MySQL