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伪造referer突破网盘禁止外连的代码
Jun 15 PHP
php Memcache 中实现消息队列
Nov 24 PHP
php设计模式  Command(命令模式)
Jun 17 PHP
PHP将字符分解为多个字符串的方法
Nov 22 PHP
php中mt_rand()随机数函数用法
Nov 24 PHP
php检查是否是ajax请求的方法
Apr 16 PHP
php计算多维数组中所有值总和的方法
Jun 24 PHP
Zend Framework实现多文件上传功能实例
Mar 21 PHP
PHP实现实时生成并下载超大数据量的EXCEL文件详解
Oct 23 PHP
微信企业转账之入口类分装php代码
Oct 01 PHP
Laravel 框架路由原理与路由访问实例分析
Apr 14 PHP
PHP获取学生成绩的方法
Nov 17 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程序的方法
2009/03/09 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
2014/05/19 PHP
PHP文件缓存类示例分享
2015/01/30 PHP
PHP5.2中PDO的简单使用方法
2016/03/25 PHP
JS 实现双色表格实现代码
2009/11/24 Javascript
javascript中&quot;/&quot;运算符常见错误
2010/10/13 Javascript
jQuery 阴影插件代码分享
2012/01/09 Javascript
jQuery循环滚动展示代码 可应用到文字和图片上
2012/05/11 Javascript
jquery对dom的操作常用方法整理
2013/06/25 Javascript
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
JQuery CheckBox(复选框)操作方法汇总
2015/04/15 Javascript
网页收藏夹显示ICO图标(代码少)
2015/08/04 Javascript
JS实现密码框的显示密码和隐藏密码功能示例
2016/12/26 Javascript
jQuery实现最简单实用的分秒倒计时
2017/02/05 Javascript
用nodeJS搭建本地文件服务器的几种方法小结
2017/03/16 NodeJs
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
JavaScript插件Tab选项卡效果
2017/11/14 Javascript
JavaScript模块详解
2017/12/18 Javascript
bootstrap-table formatter 使用vue组件的方法
2019/05/09 Javascript
ES6基础之 Promise 对象用法实例详解
2019/08/22 Javascript
[57:31]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第一场 2月1日
2021/03/11 DOTA
Python中关于字符串对象的一些基础知识
2015/04/08 Python
python实现员工管理系统
2018/01/11 Python
浅析python3字符串格式化format()函数的简单用法
2018/12/07 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
2019/06/05 Python
PyCharm 专业版安装图文教程
2020/02/20 Python
adidas爱尔兰官方网站:阿迪达斯运动鞋和运动服
2019/11/01 全球购物
4s店总经理岗位职责
2013/12/31 职场文书
幼儿园中班评语大全
2014/04/17 职场文书
公证委托书
2014/08/01 职场文书
工厂门卫岗位职责
2015/04/13 职场文书
2016年第16个全民国防教育日宣传活动总结
2016/04/05 职场文书
解决golang post文件时Content-Type出现的问题
2021/05/02 Golang
解决Pytorch修改预训练模型时遇到key不匹配的情况
2021/06/05 Python
Pandas数据结构之Series的使用
2022/03/31 Python
Python可视化神器pyecharts绘制地理图表
2022/07/07 Python