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中慎用双等于(==)的详解
Jun 06 PHP
thinkphp3查询mssql数据库乱码解决方法分享
Feb 11 PHP
从PHP的源码中深入了解stdClass类
Apr 18 PHP
php实现文件下载代码分享
Aug 19 PHP
php广告加载类用法实例
Sep 23 PHP
PHP中实现Bloom Filter算法
Mar 30 PHP
基于CakePHP实现的简单博客系统实例
Jun 28 PHP
PHP MVC框架skymvc支持多文件上传
May 26 PHP
PHP生成短网址方法汇总
Jul 12 PHP
Yii2中cookie用法示例分析
Jul 18 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 PHP
PHP实现打包zip并下载功能
Jun 12 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 calender(日历)二个版本代码示例(解决2038问题)
2013/12/24 PHP
jQuery UI Autocomplete 1.8.16 中文输入修正代码
2012/04/16 Javascript
如何在JavaScript中实现私有属性的写类方式(二)
2013/12/04 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
2016/03/08 Javascript
基于Vue如何封装分页组件
2016/12/16 Javascript
基于vue+canvas的excel-like组件实例详解
2017/11/28 Javascript
vue 实现通过手机发送短信验证码注册功能
2018/04/19 Javascript
Angular中的ng-template及angular 使用ngTemplateOutlet 指令的方法
2018/08/08 Javascript
vue中多个倒计时实现代码实例
2019/03/27 Javascript
vue封装可复用组件confirm,并绑定在vue原型上的示例
2019/10/31 Javascript
vue之组件内监控$store中定义变量的变化详解
2019/11/08 Javascript
Vue中点击active并第一个默认选中功能的实现
2020/02/24 Javascript
Python简单实现enum功能的方法
2016/04/25 Python
Python中字符串的处理技巧分享
2016/09/17 Python
Python使用pymysql从MySQL数据库中读出数据的方法
2018/07/25 Python
Python多进程与服务器并发原理及用法实例分析
2018/08/21 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
python分布式计算dispy的使用详解
2019/12/22 Python
Matplotlib scatter绘制散点图的方法实现
2020/01/02 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
2020/08/05 Python
世界上最大的网络主机公司:1&1
2016/10/12 全球购物
JACK & JONES瑞典官方网站:杰克琼斯欧式风格男装
2017/12/23 全球购物
Allsole美国/加拿大:英国一家专门出售品牌鞋子的网站
2018/10/21 全球购物
美国唇部护理专家:Sara Happ
2019/06/19 全球购物
读书心得体会
2013/12/28 职场文书
会议邀请函范文
2014/01/09 职场文书
小区门卫管理制度
2014/01/29 职场文书
旅行社各个岗位职责
2014/03/15 职场文书
《草原的早晨》教学反思
2014/04/08 职场文书
安全教育演讲稿
2014/05/09 职场文书
北京故宫导游词
2015/01/31 职场文书
总经理致辞
2015/07/29 职场文书
领导干部学习心得体会
2016/01/23 职场文书
nginx location优先级的深入讲解
2021/03/31 Servers
MySQL创建索引需要了解的
2021/04/08 MySQL
JavaScript中的宏任务和微任务详情
2021/11/27 Javascript