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 如何向 MySQL 发送数据
Oct 09 PHP
table标签的结构与合并单元格的实现方法
Jul 24 PHP
php对数组排序的简单实例
Dec 25 PHP
PHPAnalysis中文分词类详解
Jun 13 PHP
php 魔术方法详解
Nov 11 PHP
phplot生成图片类用法详解
Jan 06 PHP
JavaScript与HTML结合的基本使用方法整理
Oct 12 PHP
在WordPress中安装使用视频播放器插件Hana Flv Player
Jan 04 PHP
PHP生成腾讯云COS接口需要的请求签名
May 20 PHP
PHP实现百度人脸识别
May 06 PHP
Referer原理与图片防盗链实现方法详解
Jul 03 PHP
Linux系统下安装PHP7.3版本
Jun 26 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
Windows下的PHP5.0安装配制详解
2006/09/05 PHP
类的另类用法--数据的封装
2006/10/09 PHP
php adodb介绍
2009/03/19 PHP
phpmyadmin打开很慢的解决方法
2014/04/21 PHP
PHP发送短信代码分享
2015/08/11 PHP
laravel框架关于搜索功能的实现
2018/03/15 PHP
PHP中localeconv()函数的用法
2019/03/26 PHP
javascript AutoScroller 函数类
2009/05/29 Javascript
JavaScript 学习笔记(十六) js事件
2010/02/01 Javascript
jQuery中Form相关知识汇总
2015/01/06 Javascript
JavaScript中Number.NEGATIVE_INFINITY值的使用详解
2015/06/05 Javascript
JS 根据子网掩码,网关计算出所有IP地址范围示例
2020/04/23 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
2016/09/23 Javascript
AngularJS中watch监听用法分析
2016/11/04 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/25 Javascript
解决vue-cli中stylus无法使用的问题方法
2017/06/19 Javascript
JavaScript实现body内任意节点的自定义属性功能示例
2017/09/18 Javascript
vue实现表格合并功能
2020/12/01 Vue.js
ES6字符串的扩展实例
2020/12/21 Javascript
[01:14:30]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第二场 8.20.mp4
2019/08/22 DOTA
Python使用设计模式中的责任链模式与迭代器模式的示例
2016/03/02 Python
python中format()函数的简单使用教程
2018/03/14 Python
详解Django+Uwsgi+Nginx的生产环境部署
2018/06/25 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
2018/12/15 Python
python处理document文档保留原样式
2019/09/23 Python
python 密码学示例——凯撒密码的实现
2020/09/21 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
2020/09/24 Python
Fanatics法国官网:美国体育电商
2019/08/27 全球购物
介绍一下grep命令的使用
2012/06/28 面试题
小学信息技术教学反思
2014/02/10 职场文书
士力架广告词
2014/03/20 职场文书
团员个人总结
2015/02/26 职场文书
启迪人心的励志语录:脾气永远不要大于本事
2020/01/02 职场文书
Spring boot应用启动后首次访问很慢的解决方案
2021/06/23 Java/Android
Python自动化实战之接口请求的实现
2022/05/30 Python
WinServer2012搭建DNS服务器的方法步骤
2022/06/10 Servers