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 相关文章推荐
Linux下进行MYSQL编程时插入中文乱码的解决方案
Mar 15 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
Aug 07 PHP
php读取目录及子目录下所有文件名的方法
Oct 20 PHP
php实现获取文件mime类型的方法
Feb 11 PHP
php猴子选大王问题解决方法
May 12 PHP
Joomla开启SEF的方法
May 04 PHP
yii2 modal弹窗之ActiveForm ajax表单异步验证
Jun 13 PHP
php版微信自动获取收货地址api用法示例
Sep 22 PHP
Yii2数据库操作常用方法小结
May 04 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 PHP
学习thinkphp5.0验证类使用方法
Nov 16 PHP
微信推送功能实现方式图文详解
Jul 12 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
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
2015/05/21 PHP
Jquery css函数用法(判断标签是否拥有某属性)
2011/05/28 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
nodejs URL模块操作URL相关方法介绍
2015/03/03 NodeJs
JQuery中DOM事件合成用法实例分析
2015/06/13 Javascript
理解javascript中DOM事件
2015/12/25 Javascript
javascript html5实现表单验证
2016/03/01 Javascript
Javascript闭包与函数柯里化浅析
2016/06/22 Javascript
JS给Array添加是否包含字符串的简单方法
2016/10/29 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
JavaScript数据结构之二叉树的遍历算法示例
2017/04/13 Javascript
详解nodeJS之二进制buffer对象
2017/06/03 NodeJs
微信小程序实现页面跳转传值的方法
2017/10/12 Javascript
详解JavaScript中的数组合并方法和对象合并方法
2018/05/11 Javascript
vue做移动端适配最佳解决方案(亲测有效)
2018/09/04 Javascript
Vue的自定义组件不能使用click方法的解决
2020/07/28 Javascript
Vue实现省市区三级联动
2020/12/27 Vue.js
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
python爬虫_自动获取seebug的poc实例
2017/08/05 Python
Python比较2个时间大小的实现方法
2018/04/10 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
2020/03/11 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
2021/01/05 Python
I.T中国官网:精选时尚设计师单品网购平台
2018/03/26 全球购物
德国咖啡批发商:Coffeefair
2019/08/26 全球购物
KEEN美国官网:美国人气户外休闲鞋品牌
2021/03/09 全球购物
大学生个人求职信范文
2013/09/21 职场文书
酒店保洁主管岗位职责
2013/11/28 职场文书
学生拾金不昧表扬信
2014/01/21 职场文书
社区党员先进事迹
2014/01/22 职场文书
护士个人自我鉴定
2014/03/24 职场文书
社区党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
小学毕业感言100字
2015/07/30 职场文书
完美处理python与anaconda环境变量的冲突问题
2021/04/07 Python
利用Pycharm连接服务器的全过程记录
2021/07/01 Python
Python 数据可视化之Bokeh详解
2021/11/02 Python