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的一个登录的类 [推荐]
Mar 16 PHP
php下将XML转换为数组
Jan 01 PHP
PHP编码规范之注释和文件结构说明
Jul 09 PHP
PHP开发中四种查询返回结果分析
Jan 02 PHP
PHP逐行输出(ob_flush与flush的组合)
Feb 04 PHP
thinkphp3查询mssql数据库乱码解决方法分享
Feb 11 PHP
php中Ctype函数用法详解
Dec 09 PHP
PHP使用flock实现文件加锁的方法
Jul 01 PHP
thinkphp3.2点击刷新生成验证码
Feb 16 PHP
如何解决PHP使用mysql_query查询超大结果集超内存问题
Mar 14 PHP
Android App中DrawerLayout抽屉效果的菜单编写实例
Mar 21 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
Jun 30 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
图片存储与浏览一例(Linux+Apache+PHP+MySQL)
2006/10/09 PHP
PHP实现的超长文本分页显示功能示例
2018/06/04 PHP
jquery 卷帘效果实现代码(不同方向)
2013/02/05 Javascript
扩展js对象数组的OrderByAsc和OrderByDesc方法实现思路
2013/05/17 Javascript
js实现按钮加背景图片常用方法
2014/11/01 Javascript
jquery+css实现绚丽的横向二级下拉菜单-附源码下载
2015/08/23 Javascript
使用JavaScript和CSS实现文本隔行换色的方法
2015/11/04 Javascript
详解JavaScript中的事件流和事件处理程序
2016/05/20 Javascript
基于Turn.js 实现翻书效果实例解析
2016/06/20 Javascript
Angularjs 依赖压缩及自定义过滤器写法
2017/02/04 Javascript
JavaScript正则替换HTML标签功能示例
2017/03/02 Javascript
vue.js获取数据库数据实例代码
2017/05/26 Javascript
微信小程序图片宽100%显示并且不变形
2017/06/21 Javascript
Vue项目中最新用到的一些实用小技巧
2018/11/06 Javascript
layui添加动态菜单与选项卡 AJAX请求的例子
2019/09/25 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
[03:30]完美盛典趣味短片 CSGO2019年度名场面
2019/12/07 DOTA
python实现数通设备端口监控示例
2014/04/02 Python
详解Python中的元组与逻辑运算符
2015/10/13 Python
Python实现将照片变成卡通图片的方法【基于opencv】
2018/01/17 Python
Python中使用Counter进行字典创建以及key数量统计的方法
2018/07/06 Python
win8下python3.4安装和环境配置图文教程
2018/07/31 Python
python 高效去重复 支持GB级别大文件的示例代码
2018/11/08 Python
pandas DataFrame索引行列的实现
2019/06/04 Python
python pandas生成时间列表
2019/06/29 Python
一年级班主任感言
2014/03/08 职场文书
批评与自我批评发言稿
2014/10/15 职场文书
2014年人事科工作总结
2014/11/19 职场文书
2014年流动人口工作总结
2014/11/26 职场文书
兵马俑的导游词
2015/02/02 职场文书
英雄儿女观后感
2015/06/09 职场文书
住房公积金贷款工资证明
2015/06/12 职场文书
团结主题班会
2015/08/13 职场文书
安全教育培训心得体会
2016/01/15 职场文书
幼儿园教师教学反思
2016/03/02 职场文书
Java 通过手写分布式雪花SnowFlake生成ID方法详解
2022/04/07 Java/Android