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 07 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
Oct 31 PHP
PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
Nov 20 PHP
php防止恶意刷新与刷票的方法
Nov 21 PHP
给WordPress的编辑后台添加提示框的代码实例分享
Dec 25 PHP
详解php魔术方法(Magic methods)的使用方法
Feb 14 PHP
Zend Framework处理Json数据方法详解
Dec 09 PHP
PHP实现的分页类定义与用法示例
Jul 05 PHP
PHP异步进程助手async-helper
Feb 05 PHP
PHP数组遍历的几种常见方式总结
Feb 15 PHP
PHP中关于php.ini参数优化详解
Feb 28 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
Aug 24 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+AJAX实现无刷新注册(带用户名实时检测)
2006/12/02 PHP
精通php的十大要点(上)
2009/02/04 PHP
如何使用FireFox插件FirePHP调试PHP
2013/07/23 PHP
php递归函数中使用return的注意事项
2014/01/17 PHP
ThinkPHP发送邮件示例代码
2016/10/08 PHP
javascript 定义初始化数组函数
2009/09/07 Javascript
Javascript 定时器调用传递参数的方法
2009/11/12 Javascript
12行javascript代码绘制一个八卦图
2015/04/02 Javascript
详细分析Javascript中创建对象的四种方式
2016/08/17 Javascript
微信小程序 action-sheet底部菜单详解
2016/10/27 Javascript
input type=file 选择图片并且实现预览效果的实例
2017/10/26 Javascript
jQuery选择器之层次选择器用法实例分析
2019/02/19 jQuery
微信小程序学习笔记之函数定义、页面渲染图文详解
2019/03/28 Javascript
vue项目打包上传github并制作预览链接(pages)
2019/04/19 Javascript
关于layui的下拉搜索框异步加载数据的解决方法
2019/09/28 Javascript
JS数组splice操作实例分析
2019/10/12 Javascript
Python文件和目录操作详解
2015/02/08 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2018/01/04 Python
PyTorch读取Cifar数据集并显示图片的实例讲解
2018/07/27 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
2018/11/29 Python
python模块之subprocess模块级方法的使用
2019/03/26 Python
python自动循环定时开关机(非重启)测试
2019/08/26 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
2020/03/12 Python
python实现FTP循环上传文件
2020/03/20 Python
python单元测试框架pytest的使用示例
2020/10/07 Python
国贸专业个人求职信范文
2014/01/08 职场文书
个人授权委托书范文
2014/09/21 职场文书
2014年乡镇民政工作总结
2014/12/02 职场文书
店铺转让协议书
2014/12/02 职场文书
考研复习计划
2015/01/19 职场文书
建国大业电影观后感
2015/06/01 职场文书
防溺水主题班会教案
2015/08/12 职场文书
2016年大学生社会实践心得体会
2015/10/09 职场文书
安全生产标语口号
2015/12/26 职场文书
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
2022/01/22 MySQL
MySQL 原理与优化之原数据锁的应用
2022/08/14 MySQL