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 相关文章推荐
如何在PHP中使用Oracle数据库(3)
Oct 09 PHP
利用php递归实现无限分类 格式化数组的详解
Jun 08 PHP
windows环境下php配置memcache的具体操作步骤
Jun 09 PHP
Linux编译升级php的详细方法
Nov 04 PHP
利用谷歌 Translate API制作自己的翻译脚本
Jun 04 PHP
php将字符串转换成16进制的方法
Mar 17 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
Jul 02 PHP
简单介绍PHP的责任链编程模式
Aug 11 PHP
Session 失效的原因汇总及解决丢失办法
Sep 30 PHP
Yii清理缓存的方法
Jan 06 PHP
php 函数使用可变数量的参数方法
May 02 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
Jul 20 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
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
php中取得URL的根域名的代码
2011/03/23 PHP
PHP通过正则表达式下载图片到本地的实现代码
2011/09/19 PHP
解析CI即CodeIgniter框架在Nginx下的重写规则
2013/06/03 PHP
探讨php中防止SQL注入最好的方法是什么
2013/06/10 PHP
php中字符查找函数strpos、strrchr与strpbrk用法
2014/11/18 PHP
php删除左端与右端空格的方法
2014/11/29 PHP
Zend Framework自定义Helper类相关注意事项总结
2016/03/14 PHP
PHP的mysqli_thread_id()函数讲解
2019/01/24 PHP
PHP中number_format()函数的用法讲解
2019/04/08 PHP
laravel开发环境homestead搭建过程详解
2020/07/03 PHP
js 动态文字滚动的例子
2011/01/17 Javascript
jquery删除提示框弹出是否删除对话框
2014/01/07 Javascript
nodejs获取本机内网和外网ip地址的实现代码
2014/06/01 NodeJs
Node.js插件的正确编写方式
2014/08/03 Javascript
AngularJS入门教程(零):引导程序
2014/12/06 Javascript
jQuery实现表格行上移下移和置顶的方法
2015/05/22 Javascript
JS模式之单例模式基本用法
2015/06/30 Javascript
jQuery检测返回值的数据类型
2015/07/13 Javascript
Javascript原型链的原理详解
2016/01/05 Javascript
Angular路由简单学习
2016/12/26 Javascript
jQuery实现倒计时重新发送短信验证码功能示例
2017/01/12 Javascript
angular+ionic 的app上拉加载更新数据实现方法
2017/01/16 Javascript
JS中setTimeout和setInterval的最大延时值详解
2017/02/13 Javascript
JS模拟实现哈希表及应用详解
2018/05/04 Javascript
layui实现把数据表格时间戳转换为时间格式的例子
2019/09/12 Javascript
JS判断数组是否包含某元素实现方法汇总
2020/06/24 Javascript
Python线性回归实战分析
2018/02/01 Python
Python输出由1,2,3,4组成的互不相同且无重复的三位数
2018/02/01 Python
银行求职信
2014/05/31 职场文书
飞机制造技术专业求职信
2014/07/27 职场文书
国家奖学金获奖感言
2014/08/16 职场文书
离婚财产处理协议书
2014/09/30 职场文书
医院党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
2014年单位法制宣传日活动总结
2014/11/01 职场文书
2015年国庆节寄语
2015/08/17 职场文书