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 相关文章推荐
PHP 循环列出目录内容的函数代码
May 26 PHP
Zend的MVC机制使用分析(一)
May 02 PHP
PHP添加Xdebug扩展的方法
Feb 12 PHP
CI框架中通过hook的方式实现简单的权限控制
Jan 07 PHP
JavaScript实现滚动栏效果的方法
Apr 27 PHP
再Docker中架设完整的WordPress站点全攻略
Jul 29 PHP
PHP中使用array函数新建一个数组
Nov 19 PHP
php用户登录之cookie信息安全分析
May 13 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
Nov 14 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
Feb 04 PHP
PHP生成加减算法方式的验证码实例
Mar 12 PHP
在 Laravel 中动态隐藏 API 字段的方法
Oct 25 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
Discuz! Passport 通行证整合
2008/03/27 PHP
九个你必须知道而且又很好用的php函数和特点
2013/08/08 PHP
php 获取文件行数的方法总结
2016/10/11 PHP
javascript 显示当前系统时间代码
2009/12/28 Javascript
JS 类型转换常见方法小结
2010/05/31 Javascript
有趣的JavaScript数组长度问题代码说明
2011/01/20 Javascript
jQuery之自动完成组件的深入解析
2013/06/19 Javascript
js中return false(阻止)的用法
2013/08/14 Javascript
深入理解javascript原型链和继承
2014/09/23 Javascript
深入理解JavaScript系列(26):设计模式之构造函数模式详解
2015/03/03 Javascript
js实现改进的仿蓝色论坛导航菜单效果代码
2015/09/06 Javascript
Node.js 条形码识别程序构建思路详解
2016/02/14 Javascript
由浅入深剖析Angular表单验证
2016/07/14 Javascript
JS数组排序方法实例分析
2016/12/16 Javascript
jQuery实现联动下拉列表查询框
2017/01/04 Javascript
vue使用Axios做ajax请求详解
2017/06/07 Javascript
原生JS实现DOM加载完成马上执行JS代码的方法
2018/09/07 Javascript
微信小程序与公众号卡券/会员打通的问题
2019/07/25 Javascript
使用JavaScript实现网页秒表功能(含开始、暂停、继续、重置功能)
2020/06/05 Javascript
[01:14]3.19DOTA2发布会 三代刀塔人第二代
2014/03/25 DOTA
python实现类似ftp传输文件的网络程序示例
2014/04/08 Python
Python的Django框架中的select_related函数对QuerySet 查询的优化
2015/04/01 Python
PyQt5每天必学之像素图控件QPixmap
2018/04/19 Python
Python Matplotlib库安装与基本作图示例
2019/01/09 Python
python实现低通滤波器代码
2020/02/26 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
python 实时调取摄像头的示例代码
2020/11/25 Python
LightInTheBox西班牙站点:全球商品在线采购
2016/09/22 全球购物
欧洲品牌瓷器餐具网上商店:Porzellantreff.de
2018/04/04 全球购物
商务主管岗位职责
2013/12/08 职场文书
给海归自荐信的建议
2013/12/13 职场文书
集体备课反思
2014/02/12 职场文书
社区娱乐活动方案
2014/08/21 职场文书
2015年银行信贷员工作总结
2015/05/19 职场文书
检察院起诉书
2015/05/20 职场文书
魂断蓝桥观后感
2015/06/10 职场文书