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中根据某年第几天计算出日期年月日的代码
Feb 24 PHP
php命名空间学习详解
Feb 27 PHP
PHP常用函数和常见疑难问题解答
Mar 05 PHP
排序算法之PHP版快速排序、冒泡排序
Apr 09 PHP
destoon实现底部添加你是第几位访问者的方法
Jul 15 PHP
php使用PDO方法详解
Dec 27 PHP
php计算一个文件大小的方法
Mar 30 PHP
php获取汉字拼音首字母的方法
Oct 21 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 PHP
PHP 断点续传实例详解
Nov 11 PHP
PHPMAILER实现PHP发邮件功能
Apr 18 PHP
tp5实现微信小程序多图片上传到服务器功能
Jul 16 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的ob_start() 控制您的浏览器cache
2009/08/03 PHP
深入理解PHP原理之错误抑制与内嵌HTML分析
2011/05/02 PHP
基于php设计模式中工厂模式详细介绍
2013/05/15 PHP
php sybase_fetch_array使用方法
2014/04/15 PHP
php中隐形字符65279(utf-8的BOM头)问题
2014/08/16 PHP
变量在 PHP7 内部的实现(二)
2015/12/21 PHP
JQuery从头学起第二讲
2010/07/04 Javascript
jquery $.each()使用探讨
2013/09/23 Javascript
使用js判断控件是否获得焦点
2014/01/03 Javascript
js实现可得到不同颜色值的颜色选择器实例
2015/02/28 Javascript
微信支付如何实现内置浏览器的H5页面支付
2015/09/25 Javascript
Javascript的动态增加类的实现方法
2016/10/20 Javascript
JavaScript设计模式之原型模式分析【ES5与ES6】
2018/07/26 Javascript
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
vue项目开发中setTimeout等定时器的管理问题
2018/09/13 Javascript
Vue.js上传图片到阿里云OSS存储的方法示例
2018/12/13 Javascript
JavaScript如何把两个数组对象合并过程解析
2019/10/10 Javascript
JS实现图片切换特效
2019/12/23 Javascript
vue 微信扫码登录(自定义样式)
2020/01/06 Javascript
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
Django集成百度富文本编辑器uEditor攻略
2014/07/04 Python
python基础教程之Hello World!
2014/08/29 Python
python插入数据到列表的方法
2015/04/30 Python
python文件操作相关知识点总结整理
2016/02/22 Python
Python 结巴分词实现关键词抽取分析
2017/10/21 Python
Centos7 Python3下安装scrapy的详细步骤
2018/03/15 Python
HTML5 input placeholder 颜色修改示例
2014/05/30 HTML / CSS
html5手机端页面可以向右滑动导致样式受影响的问题
2018/06/20 HTML / CSS
Stefania Mode英国:奢华设计师和时尚服装
2017/10/23 全球购物
Ootori在线按摩椅店:一家专业的按摩椅制造商
2019/04/10 全球购物
2014年小学元旦活动方案
2014/02/12 职场文书
英语求职信范文
2014/05/23 职场文书
2014年机关作风建设工作总结
2014/10/23 职场文书
2015共产党员公开承诺书
2015/01/22 职场文书
鲁迅故居导游词
2015/02/05 职场文书
礼貌问候语大全
2015/11/10 职场文书