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 相关文章推荐
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
Oct 09 PHP
PHPLog php 程序调试追踪工具
Sep 09 PHP
php颜色转换函数hex-rgb(将十六进制格式转成十进制格式)
Sep 23 PHP
php绘制一条弧线的方法
Jan 24 PHP
分享PHP函数实现数字与文字分页代码
Jul 28 PHP
PHP测试成功的邮件发送案例
Oct 26 PHP
CodeIgniter视图使用注意事项
Jan 20 PHP
PHP开发中解决并发问题的几种实现方法分析
Nov 13 PHP
PHP生成随机数的方法总结
Mar 01 PHP
php从数据库中获取数据用ajax传送到前台的方法
Aug 20 PHP
PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】
Jun 14 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
Mar 09 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编程实现获取excel文档内容的代码实例
2011/06/28 PHP
redis 队列操作的例子(php)
2012/04/12 PHP
set_include_path和get_include_path使用及注意事项
2013/02/02 PHP
深入apache host的配置详解
2013/06/09 PHP
Laravel 5 框架入门(三)
2015/04/09 PHP
Laravel中的Auth模块详解
2017/08/17 PHP
基于ThinkPHP删除目录及目录文件函数
2020/10/28 PHP
Prototype 学习 Prototype对象
2009/07/12 Javascript
NodeJS与Mysql的交互示例代码
2013/08/18 NodeJs
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
JS实现关键字搜索时的相关下拉字段效果
2014/08/05 Javascript
javascript常见数据验证插件大全
2015/08/03 Javascript
原生js页面滚动延迟加载图片
2015/12/20 Javascript
详解JavaScript正则表达式之分组匹配及反向引用
2016/03/09 Javascript
JavaScript基于对象去除数组重复项的方法
2016/10/09 Javascript
jsTree事件和交互以及插件plugins详解
2017/08/29 Javascript
AngularJS实现的根据数量与单价计算总价功能示例
2017/12/26 Javascript
彻底理解js面向对象之继承
2018/02/04 Javascript
Vue.js 点击按钮显示/隐藏内容的实例代码
2018/02/08 Javascript
35个最好用的Vue开源库(史上最全)
2019/01/03 Javascript
vue监听浏览器原生返回按钮,进行路由转跳操作
2020/09/09 Javascript
Vue实现返回顶部按钮实例代码
2020/10/21 Javascript
Vue 简单实现前端权限控制的示例
2020/12/25 Vue.js
对pandas的行列名更改与数据选择详解
2018/11/12 Python
解决python 文本过滤和清理问题
2019/08/28 Python
python同义词替换的实现(jieba分词)
2020/01/21 Python
使用Pycharm(Python工具)新建项目及创建Python文件的教程
2020/04/26 Python
Python坐标轴操作及设置代码实例
2020/06/04 Python
天游软件面试
2013/11/23 面试题
自动化工程专业个人应聘自荐信
2013/09/26 职场文书
工程招投标邀请书
2014/01/30 职场文书
黄河象教学反思
2014/02/10 职场文书
房屋租赁合同协议书范本
2014/10/19 职场文书
爱心捐款感谢信
2015/01/20 职场文书
小区环境卫生倡议书
2015/04/29 职场文书
神州牡丹园的导游词
2019/11/20 职场文书