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查询数据库中满足条件的记录条数(两种实现方法)
Jan 29 PHP
深入PHP变量存储的详解
Jun 13 PHP
解析Ubuntu下crontab命令的用法
Jun 24 PHP
Codeigniter实现处理用户登录验证后的URL跳转
Jun 12 PHP
php可生成缩略图的文件上传类实例
Dec 17 PHP
php实现阿拉伯数字和罗马数字相互转换的方法
Apr 17 PHP
PHP中多线程的两个实现方法
Oct 14 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
Sep 15 PHP
Laravel 5.4.36中session没有保存成功问题的解决
Feb 19 PHP
workerman结合laravel开发在线聊天应用的示例代码
Oct 30 PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
Mar 08 PHP
Yii 框架使用Forms操作详解
May 18 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实现多服务器session共享之NFS共享的方法
2007/03/16 PHP
PHPExcel读取Excel文件的实现代码
2011/12/06 PHP
Yii中的cookie的发送和读取
2016/07/27 PHP
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
2009/11/27 Javascript
JavaScript的单例模式 (singleton in Javascript)
2010/06/11 Javascript
jQuery的实现原理的模拟代码 -5 Ajax
2010/08/07 Javascript
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
2012/02/27 Javascript
UI Events 用户界面事件
2012/06/27 Javascript
解析Jquery的LigerUI如何实现文件上传
2013/07/09 Javascript
jQuery之字体大小的设置方法
2014/02/27 Javascript
jquery数组过滤筛选方法grep()简介
2014/06/06 Javascript
window.location 对象所包含的属性
2014/10/10 Javascript
javascript中的Function.prototye.bind
2015/06/25 Javascript
学习使用bootstrap基本控件(table、form、button)
2016/04/12 Javascript
jQuery上传多张图片带进度条样式(DEMO)
2017/03/02 Javascript
详谈jQuery.load()和Jsp的include的区别
2017/04/12 jQuery
vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据
2017/04/22 Javascript
BootStrap的两种模态框方式
2017/05/10 Javascript
最通俗易懂的javascript变量提升详解
2017/08/05 Javascript
Node使用Sequlize连接Mysql报错:Access denied for user ‘xxx’@‘localhost’
2018/01/03 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
jquery插件实现轮播图效果
2020/10/19 jQuery
vue 防止页面加载时看到花括号的解决操作
2020/11/09 Javascript
[01:07]2015国际邀请赛 中国区预选赛精彩回顾
2015/06/15 DOTA
[47:42]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python常用知识点汇总
2016/05/08 Python
Python中%是什么意思?python中百分号如何使用?
2018/03/20 Python
用python写爬虫简单吗
2020/07/28 Python
OpenCV灰度化之后图片为绿色的解决
2020/12/01 Python
HTML5 使用 sessionStorage 进行页面传值的方法
2018/07/02 HTML / CSS
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
加拿大时尚少女服装品牌:Garage
2016/10/10 全球购物
监理资料员岗位职责
2014/01/03 职场文书
父亲追悼会答谢词
2014/01/17 职场文书
《动手做做看》教学反思
2014/04/09 职场文书
信息与工商管理职业规划范文:为梦想而搏击
2014/09/11 职场文书