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 相关文章推荐
Excel数据导入Mysql数据库的实现代码
Jun 05 PHP
PHP has encountered an Access Violation at 7C94BD02解决方法
Aug 24 PHP
PHPLog php 程序调试追踪工具
Sep 09 PHP
火车采集器 免费版使出收费版本功能实现原理
Sep 17 PHP
ajax+php打造进度条 readyState各状态
Mar 20 PHP
Php output buffering缓存及程序缓存深入解析
Jul 15 PHP
php判断数组中是否存在指定键(key)的方法
Mar 17 PHP
CodeIgniter配置之routes.php用法实例分析
Jan 19 PHP
PHP 应用容器化以及部署方法
Feb 12 PHP
php实现算术验证码功能
Dec 05 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
Sep 29 PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
Oct 25 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/06/05 PHP
php 3行代码的分页算法(求起始页和结束页)
2009/10/21 PHP
PHP5 字符串处理函数大全
2010/03/23 PHP
Notice: Trying to get property of non-object problem(PHP)解决办法
2012/03/11 PHP
关于UEditor编辑器远程图片上传失败的解决办法
2012/08/31 PHP
php实现XML和数组的相互转化功能示例
2017/02/08 PHP
php操作redis命令及代码实例大全
2020/11/19 PHP
Javascript面向对象之四 继承
2011/02/08 Javascript
js两行代码按指定格式输出日期时间
2011/10/21 Javascript
jquery入门——事件机制之事件中的冒泡现象示例解释
2020/09/12 Javascript
jquery实现图片翻页效果
2013/12/23 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
2014/04/15 Javascript
js图片预加载示例
2014/04/30 Javascript
js生成缩略图后上传并利用canvas重绘
2014/05/15 Javascript
js完美解决IE6不支持position:fixed的bug
2015/04/24 Javascript
c#程序员对TypeScript的认识过程
2015/06/19 Javascript
JavaScript中字符串拼接的基本方法
2015/07/07 Javascript
JS判断当前页面是否在微信浏览器打开的方法
2015/12/08 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
2016/03/25 Javascript
Vue2.0子同级组件之间数据交互方法
2018/02/28 Javascript
迅速了解一下ES10中Object.fromEntries的用法使用
2019/03/05 Javascript
微信小程序自定义toast组件的方法详解【含动画】
2019/05/11 Javascript
jQuery实现倒计时功能完整示例
2020/06/01 jQuery
python实现随机森林random forest的原理及方法
2017/12/21 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
Python将json文件写入ES数据库的方法
2019/04/10 Python
Python将列表中的元素转化为数字并排序的示例
2019/12/25 Python
Python3 ffmpeg视频转换工具使用方法解析
2020/08/10 Python
美国眼镜在线零售商:Dualens
2019/12/07 全球购物
Java编程面试题
2016/04/04 面试题
三年大学生活自我鉴定
2014/01/21 职场文书
幼儿园英语教学反思
2014/01/30 职场文书
员工开除通知书
2015/04/25 职场文书
写给同事的离职感言
2015/08/04 职场文书
教师病假条范文
2015/08/17 职场文书
大学迎新生欢迎词
2015/09/29 职场文书