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生成EAN_13标准条形码实例
Nov 13 PHP
php缓冲 output_buffering和ob_start使用介绍
Jan 30 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
Jun 19 PHP
php实现singleton()单例模式实例
Nov 06 PHP
php源码分析之DZX1.5随机数函数random用法
Jun 17 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
Dec 18 PHP
PHP中字符串长度的截取用法示例
Jan 12 PHP
php自定义函数实现统计中文字符串长度的方法小结
Apr 15 PHP
PHP框架Laravel中使用UUID实现数据分表操作示例
May 30 PHP
php unlink()函数使用教程
Jul 12 PHP
PHP PDOStatement::columnCount讲解
Jan 30 PHP
Laravel 实现数据软删除功能
Aug 21 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 CURL模拟GET及POST函数代码
2010/04/25 PHP
PHP序列化/对象注入漏洞分析
2016/04/18 PHP
yum命令安装php7和相关扩展
2016/07/04 PHP
PHP链表操作简单示例
2016/10/15 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
判断多个元素(RADIO,CHECKBOX等)是否被选择的原理说明
2009/02/18 Javascript
jquery中对表单的基本操作代码
2010/07/29 Javascript
用JavaScript实现类似于ListBox功能示例代码
2014/03/09 Javascript
Nodejs极简入门教程(三):进程
2014/10/27 NodeJs
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
2016/11/09 Javascript
jQuery中extend函数简单用法示例
2017/10/11 jQuery
Angular 4根据组件名称动态创建出组件的方法教程
2017/11/01 Javascript
vue.js 底部导航栏 一级路由显示 子路由不显示的解决方法
2018/03/09 Javascript
JS实现将链接生成二维码并转为图片的方法
2018/03/17 Javascript
用vue快速开发app的脚手架工具
2018/06/11 Javascript
Python入门篇之字符串
2014/10/17 Python
使用python 爬虫抓站的一些技巧总结
2018/01/10 Python
Python回文字符串及回文数字判定功能示例
2018/03/20 Python
python安装模块如何通过setup.py安装(超简单)
2018/05/05 Python
如何在django中实现分页功能
2020/04/22 Python
pygame用blit()实现动画效果的示例代码
2020/05/28 Python
python两个list[]相加的实现方法
2020/09/23 Python
matplotlib部件之套索Lasso的使用
2021/02/24 Python
快速创建 HTML5 Canvas 电信网络拓扑图的示例代码
2018/03/21 HTML / CSS
Canvas 帧动画吃苹果小游戏
2020/08/05 HTML / CSS
碧欧泉美国官网:Biotherm美国
2016/08/31 全球购物
Hunkemöller西班牙:欧洲最大的内衣连锁店
2018/08/15 全球购物
测量实习生自我鉴定
2013/09/19 职场文书
创业资金计划书
2014/02/06 职场文书
优质服务演讲稿
2014/05/14 职场文书
扬尘污染防治方案
2014/06/15 职场文书
场地使用证明模板
2014/10/25 职场文书
民主评议党员个人自我评价
2015/03/03 职场文书
幼儿园安全教育随笔
2015/08/14 职场文书