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数组函数序列之array_unshift() 在数组开头插入一个或多个元素
Nov 07 PHP
php中CI操作多个数据库的代码
Jul 05 PHP
解析php中的escape函数
Jun 29 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
Jun 29 PHP
PHP面向对象之后期静态绑定功能介绍
May 18 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
Dec 21 PHP
PHP编写RESTful接口
Feb 23 PHP
postfixadmin忘记密码后的修改密码方法详解
Jul 20 PHP
PHP通过get方法获得form表单数据方法总结
Sep 12 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
Dec 21 PHP
PHP基于timestamp和nonce实现的防止重放攻击方案分析
Jul 26 PHP
php下的原生ajax请求用法实例分析
Feb 28 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
PHP中运用jQuery的Ajax跨域调用实现代码
2012/02/21 PHP
爱恋千雪-US-AscII加密解密工具(网页加密)下载
2007/06/06 Javascript
JavaScript 动态将数字金额转化为中文大写金额
2009/05/14 Javascript
JavaScript自定义DateDiff函数(兼容所有浏览器)
2012/03/01 Javascript
JavaScript输入邮箱自动提示实例代码
2014/01/13 Javascript
javascript如何使用bind指定接收者
2014/05/04 Javascript
Javascript中实现trim()函数的两种方法
2015/02/04 Javascript
初识Node.js
2015/03/20 Javascript
jquery图片滚动放大代码分享(2)
2015/08/28 Javascript
JSONObject使用方法详解
2015/12/17 Javascript
javascript的列表切换【实现代码】
2016/05/03 Javascript
设计模式中的facade外观模式在JavaScript开发中的运用
2016/05/18 Javascript
基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)
2016/09/02 Javascript
jQuery双向列表选择器select版
2016/11/01 Javascript
Angular中$state.go页面跳转并传递参数的方法
2017/05/09 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
JavaScript模拟实现封装的三种方式及写法区别
2017/10/27 Javascript
JS基于for语句编写的九九乘法表示例
2018/01/04 Javascript
vue+webpack实现异步组件加载的方法
2018/02/03 Javascript
vue 2.x 中axios 封装的get 和post方法
2018/02/28 Javascript
说说如何在Vue.js中实现数字输入组件的方法
2019/01/08 Javascript
Vue实现点击导航栏当前标签后变色功能
2020/08/19 Javascript
[01:10:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第一场 3月4日
2021/03/11 DOTA
Python深入学习之闭包
2014/08/31 Python
python实现调用其他python脚本的方法
2014/10/05 Python
python实现石头剪刀布程序
2021/01/20 Python
Python 把序列转换为元组的函数tuple方法
2019/06/27 Python
Python中的类与类型示例详解
2019/07/10 Python
水电站项目建议书
2014/05/12 职场文书
酒店优秀员工事迹材料
2014/06/02 职场文书
学校党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
怎么写工作检讨书
2014/11/16 职场文书
黄河绝恋观后感
2015/06/08 职场文书
CSS实现两列布局的N种方法
2021/08/02 HTML / CSS
nginx安装以及配置的详细过程记录
2021/09/15 Servers
python模板入门教程之flask Jinja
2022/04/11 Python