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 相关文章推荐
在普通HTTP上安全地传输密码
Jul 21 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
Jan 23 PHP
PHP抓取网页、解析HTML常用的方法总结
Jul 01 PHP
Thinkphp+smarty+uploadify实现无刷新上传
Jul 30 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
Mar 01 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
Apr 15 PHP
thinkPHP中session()方法用法详解
Dec 08 PHP
Thinkphp整合微信支付功能
Dec 14 PHP
PHP 7.1新特性的汇总介绍
Dec 16 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
Feb 15 PHP
PHP INT类型在内存中占字节详解
Jul 20 PHP
redis+php实现微博(三)微博列表功能详解
Sep 23 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
解析php5配置使用pdo
2013/07/03 PHP
PHP生成压缩文件实例
2015/02/07 PHP
PHP使用CURL实现多线程抓取网页
2015/04/30 PHP
PHP简单实现记录网站访问量功能示例
2018/06/06 PHP
laravel邮件发送的实现代码示例
2020/01/31 PHP
jquery插件制作 提示框插件实现代码
2012/08/17 Javascript
jQuery插件 selectToSelect使用方法
2013/10/02 Javascript
JavaScript中的Web worker多线程API研究
2014/12/06 Javascript
简介JavaScript中的italics()方法的使用
2015/06/08 Javascript
JS动态创建DOM元素的方法
2015/06/09 Javascript
微信小程序 window_x64环境搭建
2016/09/30 Javascript
微信小程序 wxapp内容组件 progress详细介绍
2016/10/31 Javascript
Bootstrap超大屏幕的实现代码
2017/03/22 Javascript
JavaScript中Object值合并方法详解
2017/12/22 Javascript
微信小程序导航栏滑动定位功能示例(实现CSS3的positionsticky效果)
2019/01/24 Javascript
深入理解JS异步编程-Promise
2019/06/03 Javascript
js验证密码强度解析
2020/03/18 Javascript
vue 弹出遮罩层样式实例
2020/07/22 Javascript
进一步探究Python的装饰器的运用
2015/05/05 Python
Python简单实现TCP包发送十六进制数据的方法
2016/04/16 Python
python生成ppt的方法
2018/06/07 Python
python+POP3实现批量下载邮件附件
2018/06/19 Python
opencv python 图像去噪的实现方法
2018/08/31 Python
Python3.5运算符操作实例详解
2019/04/25 Python
django-利用session机制实现唯一登录的例子
2020/03/16 Python
python中os包的用法
2020/06/01 Python
大数据分析用java还是Python
2020/07/06 Python
利用python对mysql表做全局模糊搜索并分页实例
2020/07/12 Python
python基于pygame实现飞机大作战小游戏
2020/11/19 Python
python 指定源路径来解决import问题的操作
2021/03/04 Python
美国知名玩具品牌:Melissa & Doug
2016/08/16 全球购物
英国知名的护肤彩妆与时尚配饰大型综合零售电商:Unineed
2016/11/21 全球购物
Etam俄罗斯:法国女士内衣和家居服网上商店
2019/10/30 全球购物
个人简历自我评价
2014/02/02 职场文书
《窃读记》教学反思
2016/02/18 职场文书
详解Spring Boot使用系统参数表提升系统的灵活性
2021/06/30 Java/Android