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_Flame(Version:Progress)的原代码
Oct 09 PHP
深入PHP变量存储的详解
Jun 13 PHP
初识Laravel
Oct 30 PHP
php下pdo的mysql事务处理用法实例
Dec 27 PHP
php遍历CSV类实例
Apr 14 PHP
codeigniter实现get分页的方法
Jul 10 PHP
php计划任务之验证是否有多个进程调用同一个job的方法
Dec 07 PHP
php实现登录tplink WR882N获取IP和重启的方法
Jul 20 PHP
php查找字符串中第一个非0的位置截取
Feb 27 PHP
PHP将身份证正反面两张照片合成一张图片的代码
Apr 08 PHP
PHP多进程之pcntl_fork的实例详解
Oct 15 PHP
如何在centos8自定义目录安装php7.3
Nov 28 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 mb_convert_encoding文字编码的转换函数介绍
2011/11/10 PHP
php设计模式之命令模式使用示例
2014/03/02 PHP
php中mkdir()函数的权限问题分析
2016/09/24 PHP
通过jquery实现tab标签浏览效果
2007/02/20 Javascript
JavaScript高级程序设计 错误处理与调试学习笔记
2011/09/10 Javascript
jQuery插件slider实现拖动滑块选取价格范围
2015/04/30 Javascript
JavaScript中的lastIndexOf()方法使用详解
2015/06/06 Javascript
javascript中字体浮动效果的简单实例演示
2015/11/18 Javascript
jQuery插件EasyUI校验规则 validatebox验证框
2015/11/29 Javascript
总结jQuery插件开发中的一些要点
2016/05/16 Javascript
浅谈JavaScript的全局变量与局部变量
2016/06/10 Javascript
JavaScript数组去重由慢到快由繁到简(优化篇)
2016/08/26 Javascript
js多个物体运动功能实例分析
2016/12/20 Javascript
Bootstrap源码解读网格系统(3)
2016/12/22 Javascript
canvas实现探照灯效果
2017/02/07 Javascript
微信小程序 rich-text的使用方法
2017/08/04 Javascript
vue页面离开后执行函数的实例
2018/03/13 Javascript
js拖动滑块和点击水波纹效果实例代码
2018/10/16 Javascript
原生js实现可兼容PC和移动端的拖动滑块功能详解【测试可用】
2019/08/15 Javascript
vue路由缓存的几种实现方式小结
2020/02/02 Javascript
基于javascript的无缝滚动动画1
2020/08/07 Javascript
mac下如何将python2.7改为python3
2018/07/13 Python
Python 的AES加密与解密实现
2019/07/09 Python
查看Python依赖包及其版本号信息的方法
2019/08/13 Python
python爬虫之遍历单个域名
2019/11/20 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
关于 HTML5 的七个传说小结
2012/04/12 HTML / CSS
苹果音乐订阅:Apple Music
2018/08/02 全球购物
岗位说明书怎么写
2014/07/30 职场文书
投标授权委托书范文
2014/08/02 职场文书
北京离婚协议书范文2014
2014/09/29 职场文书
学院党的群众路线教育实践活动第一阶段情况汇报
2014/10/25 职场文书
《领导干部从政道德启示录》学习心得体会
2016/01/20 职场文书
Angular性能优化之第三方组件和懒加载技术
2021/05/10 Javascript
浅谈mysql返回Boolean类型的几种情况
2021/06/04 MySQL
springboot实现string转json json里面带数组
2022/06/16 Java/Android