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 相关文章推荐
解决控件遮挡问题:关于有窗口元素和无窗口元素
Jan 28 PHP
本地机apache配置基于域名的虚拟主机详解
Aug 10 PHP
PHP中的替代语法简介
Aug 22 PHP
php实现excel中rank函数功能的方法
Jan 20 PHP
php实现word转html的方法
Jan 22 PHP
PHP中模拟链表和链表的基本操作示例
Feb 27 PHP
PHP中类属性与类静态变量的访问方法示例
Jul 13 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
Jul 25 PHP
php 使用fopen函数创建、打开文件详解及实例代码
Sep 24 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
Nov 05 PHP
PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法
Apr 16 PHP
php装饰者模式简单应用案例分析
Oct 23 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表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
2013/01/06 PHP
PHP判断是否有Get参数的方法
2014/05/05 PHP
PHP实现通过get方式识别用户发送邮件的方法
2015/07/16 PHP
Ubuntu 16.04下安装PHP 7过程详解
2017/03/28 PHP
PHP实现获取第一个中文首字母并进行排序的方法
2017/05/09 PHP
DOM基础教程之事件对象
2015/01/20 Javascript
JavaScritp添加url参数并将参数加入到url中及更改url参数的方法
2015/10/26 Javascript
移动端 一个简单易懂的弹出框
2016/07/06 Javascript
HTML5canvas 绘制一个圆环形的进度表示实例
2016/12/16 Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
2017/01/17 Javascript
浅谈js for循环输出i为同一值的问题
2017/03/01 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
2017/03/15 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
Express系列之multer上传的使用
2017/10/27 Javascript
JavaScript实现的反序列化json字符串操作示例
2018/07/18 Javascript
node app 打包工具pkg的具体使用
2019/01/17 Javascript
Antd的Table组件嵌套Table以及选择框联动操作
2020/10/24 Javascript
js获取图片的base64编码并压缩
2020/12/05 Javascript
修改NPM全局模式的默认安装路径的方法
2020/12/15 Javascript
python3 pandas 读取MySQL数据和插入的实例
2018/04/20 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
2018/05/16 Python
对python中的six.moves模块的下载函数urlretrieve详解
2018/12/19 Python
python ftplib模块使用代码实例
2019/12/31 Python
浅谈python累加求和+奇偶数求和_break_continue
2020/02/25 Python
matplotlib quiver箭图绘制案例
2020/04/17 Python
CSS3制作精致的照片墙特效
2016/06/07 HTML / CSS
医院护士专业个人的求职信
2013/12/09 职场文书
领导的自我鉴定
2013/12/28 职场文书
千元咖啡店的创业计划书范文
2013/12/29 职场文书
养殖项目策划书范文
2014/01/13 职场文书
工厂保安员岗位职责
2014/01/31 职场文书
司机职责范本
2014/03/08 职场文书
公司委托书格式
2014/08/01 职场文书
党委班子对照检查材料
2014/08/19 职场文书
试用期工作表现自我评价
2015/03/06 职场文书
mybatis中sql语句CDATA标签的用法说明
2021/06/30 Java/Android