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 相关文章推荐
第二节 对象模型 [2]
Oct 09 PHP
目录,文件操作详谈―PHP
Nov 25 PHP
php笔记之常用文件操作
Oct 12 PHP
php自动加载机制的深入分析
Jun 08 PHP
php+mysql不用递归实现的无限级分类实例(非递归)
Jul 08 PHP
php使用NumberFormatter格式化货币的方法
Mar 21 PHP
php根据日期或时间戳获取星座信息和生肖等信息
Oct 20 PHP
CI(Codeigniter)的Setting增强配置类实例
Jan 06 PHP
深入浅析用PHP实现MVC
Mar 02 PHP
PHP5.5迭代生成器用法实例详解
Mar 16 PHP
php使用curl通过代理获取数据的实现方法
May 16 PHP
CodeIgniter框架数据库基本操作示例
May 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反弹shell实现代码
2009/04/22 PHP
探讨Hessian在PHP中的使用分析
2013/06/13 PHP
PHP传值到不同页面的三种常见方式及php和html之间传值问题
2015/11/19 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
combox改进版 页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
2010/04/15 Javascript
setInterval,setTimeout与jquery混用的问题
2013/04/08 Javascript
三种带箭头提示框总结实例
2016/06/14 Javascript
JS实现刷新父页面不弹出提示框的方法
2016/06/22 Javascript
javascript 动态脚本添加的简单方法
2016/10/11 Javascript
JavaScript实现图片瀑布流和底部刷新
2017/01/02 Javascript
微信小程序 数组中的push与concat的区别
2017/01/05 Javascript
详解JavaScript树结构
2017/01/09 Javascript
基于JavaScript实现瀑布流效果
2017/03/29 Javascript
Vue.js常用指令的使用小结
2017/06/23 Javascript
Nuxt.js实战详解
2018/01/18 Javascript
vue自定v-model实现表单数据双向绑定问题
2018/09/03 Javascript
JavaScript中filter的用法实例分析
2019/02/27 Javascript
Java 生成随机字符的示例代码
2021/01/13 Javascript
python列表操作使用示例分享
2014/02/21 Python
python实现linux服务器批量修改密码并生成execl
2014/04/22 Python
python获取远程图片大小和尺寸的方法
2015/03/26 Python
玩转python爬虫之cookie使用方法
2016/02/17 Python
PyQt5通信机制 信号与槽详解
2019/08/07 Python
Python + Flask 实现简单的验证码系统
2019/10/01 Python
详解Python中的路径问题
2020/09/02 Python
python批量修改文件名的示例
2020/09/27 Python
pycharm使用技巧之自动调整代码格式总结
2020/11/04 Python
Selenium Webdriver元素定位的八种常用方式(小结)
2021/01/13 Python
高二政治教学反思
2014/02/01 职场文书
怀念母亲教学反思
2014/04/28 职场文书
任命书怎么写
2014/06/04 职场文书
教师自我剖析材料
2014/09/29 职场文书
保送生自荐信
2015/03/06 职场文书
诚信高考倡议书
2019/06/24 职场文书
Python多线程 Queue 模块常见用法
2021/07/04 Python
三种方式清除vue路由跳转router-link的历史记录
2022/04/10 Vue.js