php下利用curl判断远程文件是否存在的实现代码


Posted in PHP onOctober 08, 2011
//判断远程文件 
function check_remote_file_exists($url) 
{ 
$curl = curl_init($url); 
// 不取回数据 
curl_setopt($curl, CURLOPT_NOBODY, true); 
// 发送请求 
$result = curl_exec($curl); 
$found = false; 
// 如果请求没有发送失败 
if ($result !== false) { 
// 再检查http响应码是否为200 
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); 
if ($statusCode == 200) { 
$found = true; 
} 
} 
curl_close($curl); return $found; 
}

最近在弄一个html5音乐播放的网站,想让我的iphone和ipad爽一爽,前端采用jquery的一个插件jplayer,经过改造之后效果还不错。
后台采用PHP,定时采集百度的MP3。 考虑到本人服务器空间菊紧,当然只能采集MP3地址,文件并没有下载到本地。考虑到百度MP3路径经常变,实在是蛋疼,于是必须定时判断一下MP3路径还对不对,于是就有了PHP判断远程文件是否存在这篇软文。开始用get_headers() 方法,后来听说存在效率问题,于是不使用此解决方案,但是也顺带一提吧,下面看看get_headers函数的效果:
//默认效果 
print_r(get_headers("http://www.baidu.com/img/baidu_sylogo1.gif")); 
结果: 
Array 
( 
[0] => HTTP/1.1 200 OK 
[1] => Date: Thu, 02 Jun 2011 02:47:27 GMT 
[2] => Server: Apache 
[3] => P3P: CP=" OTI DSP COR IVA OUR IND COM " 
[4] => Set-Cookie: BAIDUID=7F6A5A2ED03878A7791C89C526966F3A:FG=1; expires=Fri, 01-Jun-12 02:47:27 GMT; max-age=31536000; path=/; domain=.baidu.com; version=1 
[5] => Last-Modified: Thu, 20 Jan 2011 07:15:35 GMT 
[6] => ETag: "65e-49a41e65933c0" 
[7] => Accept-Ranges: bytes 
[8] => Content-Length: 1630 
[9] => Cache-Control: max-age=315360000 
[10] => Expires: Sun, 30 May 2021 02:47:27 GMT 
[11] => Connection: Close 
[12] => Content-Type: image/gif 
) 
//加参数1的效果 
print_r(get_headers("http://www.baidu.com/img/baidu_sylogo1.gif", 1)); 
结果: 
Array 
( 
[0] => HTTP/1.1 200 OK 
[Date] => Thu, 02 Jun 2011 02:49:28 GMT 
[Server] => Apache 
[P3P] => CP=" OTI DSP COR IVA OUR IND COM " 
[Set-Cookie] => BAIDUID=4D875812FC482C0ADE4F5C17068849EE:FG=1; expires=Fri, 01-Jun-12 02:49:28 GMT; max-age=31536000; path=/; domain=.baidu.com; version=1 
[Last-Modified] => Thu, 20 Jan 2011 07:15:35 GMT 
[ETag] => "65e-49a41e65933c0" 
[Accept-Ranges] => bytes 
[Content-Length] => 1630 
[Cache-Control] => max-age=315360000 
[Expires] => Sun, 30 May 2021 02:49:28 GMT 
[Connection] => Close 
[Content-Type] => image/gif 
)

怎么样,get_headers函数还是不错的吧,不过既然效率有问题,那只好不优先考虑了,curl就不错,下面看看curl的做法
function check_remote_file_exists($url) 
{ 
$curl = curl_init($url); 
// 不取回数据 
curl_setopt($curl, CURLOPT_NOBODY, true); 
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET'); //不加这个会返回403,加了才返回正确的200,原因不明 
// 发送请求 
$result = curl_exec($curl); 
$found = false; 
// 如果请求没有发送失败 
if ($result !== false) 
{ 
// 再检查http响应码是否为200 
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); 
if ($statusCode == 200) 
{ 
$found = true; 
} 
} 
curl_close($curl); 
return $found; 
} 
$exists = check_remote_file_exists('http://www.baidu.com/img/baidu_sylogo1.gif'); 
echo $exists ? '存在' : '不存在'; 
$exists = check_remote_file_exists('http://www.baidu.com/test.jpg'); 
echo $exists ? '存在' : '不存在';
PHP 相关文章推荐
PHP4实际应用经验篇(5)
Oct 09 PHP
Windows2003 下 MySQL 数据库每天自动备份
Dec 21 PHP
jQuery+php实现ajax文件即时上传的详解
Jun 17 PHP
php更新修改excel中的内容实例代码
Feb 26 PHP
php根据一个给定范围和步进生成数组的方法
Jun 19 PHP
PHP+shell脚本操作Memcached和Apache Status的实例分享
Mar 11 PHP
PHP获取网站中各文章的第一张图片的代码示例
May 20 PHP
PHP发送AT指令实例代码
May 26 PHP
PHP开发中解决并发问题的几种实现方法分析
Nov 13 PHP
PHP面向对象类型约束用法分析
Jun 12 PHP
50个优秀经典PHP算法大集合 附源码
Aug 26 PHP
php远程请求CURL案例(爬虫、保存登录状态)
Apr 01 PHP
PHP下判断网址是否有效的代码
Oct 08 #PHP
Admin generator, filters and I18n
Oct 06 #PHP
如何在symfony中导出为CSV文件中的数据
Oct 06 #PHP
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
Oct 03 #PHP
linux iconv方法的使用
Oct 01 #PHP
linux系统上支持php的 iconv()函数的方法
Oct 01 #PHP
php中mysql模块部分功能的简单封装
Sep 30 #PHP
You might like
通过table标签,PHP输出EXCEL的实现方法
2013/07/24 PHP
PHP chunk_split()函数讲解
2019/02/12 PHP
jQuery使用一个按钮控制图片的伸缩实现思路
2013/04/19 Javascript
javascript获取下拉列表框当中的文本值示例代码
2013/07/31 Javascript
Javascript数组操作函数总结
2015/02/05 Javascript
基于jQuery实现网页进度显示插件
2015/03/04 Javascript
jQuery实现的简单折叠菜单(折叠面板)效果代码
2015/09/16 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
将JavaScript的jQuery库中表单转化为JSON对象的方法
2015/11/17 Javascript
浅析JavaScript中浏览器的兼容问题
2016/04/19 Javascript
深入理解ECMAScript的几个关键语句
2016/06/01 Javascript
jQuery Raty 一款不错的星级评分插件
2016/08/24 Javascript
轻松理解JavaScript闭包
2017/03/14 Javascript
小程序如何定位所在城市及发起周边搜索
2020/02/11 Javascript
JS自定义右键菜单实现代码解析
2020/07/16 Javascript
python统计cpu利用率的方法
2015/06/02 Python
python操作mysql数据库
2017/03/05 Python
浅谈flask截获所有访问及before/after_request修饰器
2018/01/18 Python
selenium+python 对输入框的输入处理方法
2018/10/11 Python
python得到单词模式的示例
2018/10/15 Python
pytz格式化北京时间多出6分钟问题的解决方法
2019/06/21 Python
Python实现socket非阻塞通讯功能示例
2019/11/06 Python
Python timeit模块的使用实践
2020/01/13 Python
Python urllib2运行过程原理解析
2020/06/04 Python
德国高尔夫商店:Par71.de
2020/11/29 全球购物
以下为Windows NT 下的32 位C++程序,请计算sizeof 的值
2016/12/07 面试题
介绍一下代理模式(Proxy)
2014/10/17 面试题
应届生服装设计自我评价
2013/09/20 职场文书
初中物理教学反思
2014/01/14 职场文书
单位提档介绍信
2014/01/17 职场文书
寒假实习自荐信
2014/01/26 职场文书
道路交通安全实施方案
2014/03/12 职场文书
离婚上诉状范文
2015/05/23 职场文书
2015年除四害工作总结
2015/07/23 职场文书
银行文明优质服务培训心得体会
2016/01/09 职场文书
python编程学习使用管道Pipe编写优化代码
2021/11/20 Python