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编程之高级技巧——利用Mysql函数
Oct 09 PHP
linux php mysql数据库备份实现代码
Mar 10 PHP
基于MySQL到MongoDB简易对照表的详解
Jun 03 PHP
PHP使用GIFEncoder类处理gif图片实例
Jul 01 PHP
PHP下载远程文件到本地存储的方法
Mar 24 PHP
PHP读取mssql json数据中文乱码的解决办法
Apr 11 PHP
深入理解PHP中的empty和isset函数
May 26 PHP
PHP获取当前文件的父目录方法汇总
Jul 21 PHP
php中static和const关键字用法分析
Dec 07 PHP
Yii2-GridView 中让关联字段带搜索和排序功能示例
Jan 21 PHP
laravel中命名路由的使用方法
Feb 24 PHP
Laravel框架实现文件上传的方法分析
Sep 29 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
迅雷下载《中学科技》怀旧期刊下载
2021/02/27 无线电
CodeIgniter错误mysql_connect(): No such file or directory解决方法
2014/09/06 PHP
php中session_id()函数详细介绍,会话id生成过程及session id长度
2015/09/23 PHP
php使用正则表达式去掉html中的注释方法
2016/11/03 PHP
PHP中16个高危函数整理
2019/09/19 PHP
关于jquery append() html时的小问题的解决方法
2010/12/16 Javascript
js的.innerHTML = ""IE9下显示有错误的解决方法
2013/09/16 Javascript
推荐 21 款优秀的高性能 Node.js 开发框架
2014/08/18 Javascript
基于Angularjs+mybatis实现二级评论系统(仿简书)
2017/02/13 Javascript
jquery实现折叠菜单效果【推荐】
2017/03/08 Javascript
AngularJS之自定义服务详解(factory、service、provider)
2017/04/14 Javascript
node使用Koa2搭建web项目的方法
2017/10/17 Javascript
微信小程序定位当前城市的方法
2018/07/19 Javascript
jQuery实现table表格信息的展开和缩小功能示例
2018/07/21 jQuery
vue.js提交按钮时进行简单的if判断表达式详解
2018/08/08 Javascript
layDate日期控件使用方法详解
2018/11/15 Javascript
深入理解Node内建模块和对象
2019/03/12 Javascript
vue router 通过路由来实现切换头部标题功能
2019/04/24 Javascript
详解如何使用router-link对象方式传递参数?
2019/05/02 Javascript
JS深入学习之数组对象排序操作示例
2020/05/01 Javascript
解决微信授权成功后点击按返回键出现空白页和报错的问题
2020/06/08 Javascript
python基于json文件实现的gearman任务自动重启代码实例
2019/08/13 Python
Python 等分切分数据及规则命名的实例代码
2019/08/16 Python
Python基础教程(一)——Windows搭建开发Python开发环境
2020/07/20 Python
十佳青年个人事迹材料
2014/01/28 职场文书
致全体运动员广播稿
2014/02/01 职场文书
教师专业自荐书范文
2014/02/10 职场文书
八年级语文教学反思
2014/02/11 职场文书
1亿有多大教学反思
2014/05/01 职场文书
租房协议书范例
2014/10/14 职场文书
人事行政主管岗位职责
2015/04/09 职场文书
匿名信格式范文
2015/05/27 职场文书
童年读书笔记
2015/06/26 职场文书
详解前端任务构建利器Gulp.js使用指南
2021/04/30 Javascript
gojs实现蚂蚁线动画效果
2022/02/18 Javascript
如何基于python实现单目三维重建详解
2022/06/25 Python