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中与数组相关的函数
Mar 22 PHP
PHP 向右侧拉菜单实现代码,测试使用中
Nov 03 PHP
php Memcache 中实现消息队列
Nov 24 PHP
网站用php实现paypal整合方法
Nov 28 PHP
php全局变量和类配合使用深刻理解
Jun 05 PHP
php的array数组和使用实例简明教程(容易理解)
Mar 20 PHP
ThinkPHP实现支付宝接口功能实例
Dec 02 PHP
PHP 魔术变量和魔术函数详解
Feb 25 PHP
WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看
Dec 31 PHP
PHP数据库表操作的封装类及用法实例详解
Jul 12 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
Mar 10 PHP
在TP5数据库中四个字段实现无限分类的示例
Oct 18 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
[原创]网络复制内容时常用的正则+editplus
2006/11/30 Javascript
一些经常会用到的Javascript检测函数
2010/05/31 Javascript
js对象的比较
2011/02/26 Javascript
intro.js 页面引导简单用法 分享
2013/08/06 Javascript
Node.js模块加载详解
2014/08/16 Javascript
浅谈JavaScript Array对象
2014/12/29 Javascript
百度地图api如何使用
2015/08/03 Javascript
JS拖拽组件学习使用
2016/01/19 Javascript
JS平滑无缝滚动效果的实现代码
2016/05/06 Javascript
Vue.js路由vue-router使用方法详解
2017/03/20 Javascript
Vue实现动态响应数据变化
2017/04/28 Javascript
vue.js实现点击后动态添加class及删除同级class的实现代码
2018/04/04 Javascript
vue+Element-ui实现分页效果实例代码详解
2018/12/10 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
2018/12/25 Javascript
富文本编辑器vue2-editor实现全屏功能
2019/05/26 Javascript
koa2 从入门到精通(小结)
2019/07/23 Javascript
vue实现移动端省市区选择
2019/09/27 Javascript
vue计算属性+vue中class与style绑定(推荐)
2020/03/30 Javascript
vue实现信息管理系统
2020/05/30 Javascript
vue+element获取el-table某行的下标,根据下标操作数组对象方式
2020/08/07 Javascript
举例讲解如何在Python编程中进行迭代和遍历
2016/01/19 Python
使用Python多线程爬虫爬取电影天堂资源
2016/09/23 Python
Python实现图片滑动式验证识别方法
2017/11/09 Python
Python查找两个有序列表中位数的方法【基于归并算法】
2018/04/20 Python
pandas 数据归一化以及行删除例程的方法
2018/11/10 Python
Python中时间datetime的处理与转换用法总结
2019/02/18 Python
python使用paramiko模块通过ssh2协议对交换机进行配置的方法
2019/07/25 Python
Python 使用多属性来进行排序
2019/09/01 Python
用CSS3的box-reflect来制作倒影效果
2016/11/15 HTML / CSS
雅诗兰黛香港官网:Estee Lauder香港
2017/09/26 全球购物
EJB3.1都有哪些改进
2012/11/17 面试题
工程负责人任命书
2014/06/06 职场文书
毕业设计致谢语
2015/05/14 职场文书
写一个Python脚本自动爬取Bilibili小视频
2021/04/24 Python
Windows server 2022创建创建林、域树、子域的步骤
2022/06/25 Servers
apache虚拟主机配置的三种方式(小结)
2022/07/23 Servers