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中的cookie
Nov 26 PHP
隐藏你的.php文件的实现方法
Mar 19 PHP
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
Jul 31 PHP
如何使用php绘制在图片上的正余弦曲线
Jun 08 PHP
浅析php中如何在有限的内存中读取大文件
Jul 02 PHP
php生成缩略图填充白边(等比缩略图方案)
Dec 25 PHP
浅析PHP编程中10个最常见的错误
Aug 08 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
Dec 22 PHP
Yii2前后台分离及migrate使用(七)
May 04 PHP
laravel框架关于搜索功能的实现
Mar 15 PHP
作为PHP程序员你要知道的另外一种日志
Jul 30 PHP
php实现通过stomp协议连接ActiveMQ操作示例
Feb 23 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支持页面回退的两种方法[转]
2007/02/14 PHP
php gzip压缩输出的实现方法
2013/04/27 PHP
PHP禁止个别IP访问网站
2013/10/30 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
IE8提示Invalid procedure call or argument 异常的解决方法
2012/09/30 Javascript
ie下$.getJSON出现问题的解决方法
2014/02/12 Javascript
jQuery多项选项卡的实现思路附样式及代码
2014/06/03 Javascript
Javascript定义类(class)的三种方法详解
2015/03/13 Javascript
javascript检测两个数组是否相似
2015/05/19 Javascript
kindeditor编辑器点中图片滚动条往上顶的bug
2015/07/05 Javascript
基于bootstrap插件实现autocomplete自动完成表单
2016/05/07 Javascript
Javascript 基础---Ajax入门必看
2016/07/06 Javascript
jquery插件treegrid树状表格的使用方法详解(.Net平台)
2017/01/03 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
2017/06/01 jQuery
使用vue脚手架(vue-cli)搭建一个项目详解
2019/05/09 Javascript
微信小程序订阅消息(java后端实现)开发
2020/06/01 Javascript
使用next.js开发网址缩短服务的方法
2020/06/17 Javascript
基于vue实现微博三方登录流程解析
2020/11/04 Javascript
[06:25]DOTA2英雄梦之声_第17期_大地之灵
2014/06/20 DOTA
[59:36]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第二场
2018/04/04 DOTA
初学Python实用技巧两则
2014/08/29 Python
Python3实现抓取javascript动态生成的html网页功能示例
2017/08/22 Python
在django中图片上传的格式校验及大小方法
2019/07/28 Python
基于Python和PyYAML读取yaml配置文件数据
2020/01/13 Python
python数据处理——对pandas进行数据变频或插值实例
2020/04/22 Python
python爬取招聘要求等信息实例
2020/11/20 Python
sklearn中的交叉验证的实现(Cross-Validation)
2021/02/22 Python
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
全球最大最受欢迎的旅游社区:Tripadvisor
2017/11/03 全球购物
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
CHARLES & KEITH澳大利亚官网:新加坡时尚品牌
2019/01/22 全球购物
创业计划书的内容步骤和要领
2014/01/04 职场文书
文秘应聘自荐书范文
2014/02/18 职场文书
老公给老婆的保证书
2014/04/28 职场文书
反腐倡廉警示教育活动心得体会
2014/09/04 职场文书
英文诗歌翻译方法(赏析)
2019/08/16 职场文书