PHP判断远程图片是否存在的几种方法


Posted in PHP onMay 04, 2014

在做一个图片预览中图的东西,遇到一个问题,就是要判断远程文件是否存在(不是同一台服务器)。
代码如下:

//方法一
function file_exists($url)
{
$ch = curl_init();
curl_setopt($ch, curlopt_url,$url);
curl_setopt($ch, curlopt_nobody, 1); // 不下载
curl_setopt($ch, curlopt_failonerror, 1);
curl_setopt($ch, curlopt_returntransfer, 1);if(curl_exec($ch)!==false)
return true;
else
return false;
}
//方法二
function file_exists2($url)
{
if(file_get_contents($url,0,null,0,1))
return 1;
else
return 0;
}
//方法三
function file_exists($url) {
$curl = curl_init($url);
// 不取回数据
curl_setopt($curl, CURLOPT_NOBODY, true);
// 发送请求
$result = curl_exec($curl);
$found = false;
// 如果请求没有发送失败
if ($result !== false) {
// 再检查http响应码是否为200
}

方法一无论图片在不在都是返回FALSE;
方法二windows下可行,LINUX下无论图片在不在都返加TRUE;
方法三应该是最合适的
另外:用get_headers() 方法存在效率问题,建议不使用作为此解决方案

fsockopen版:

  $url = "http://www.baidu.com/img/baidu_sylogo1.gif";    $info = parse_url($url);
    $fp = fsockopen($info['host'], 80,$errno, $errstr, 30);
    fputs($fp,"GET {$info['path']} HTTP/1.1\r\n");
    fputs($fp, "Host: {$info['host']}\r\n");
    fputs($fp, "Connection: close\r\n\r\n");
    $headers = array();
    while(!feof($fp)) {
    $line = fgets($fp);
    if($line != "\r\n") {
    $headers[] = $line;
    }else {
    break;
    }
    }
    echo "<pre>";
    print_r($headers);

通过http状态码来判断文件是否存在,比如,响应 302,301,404等都为不存在,如果是200,304,等可以视为文件存在。

fopen()方法:

<?php
    $url = 'http://www.test.com/images/test.jpg';    if( @fopen( $url, 'r' ) )
    {
        echo 'File Exits';
    }
    else
    {
        echo 'File Do Not Exits';
    }
    ?>

CURL方法:
<?php
    $url2 = 'http://www.test.com/test.jpg';    $ch = curl_init();
    $timeout = 10;
    curl_setopt ($ch, CURLOPT_URL, $url2);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $contents = curl_exec($ch);
    //echo $contents;
    if (preg_match("/404/", $contents)){
        echo '文件不存在';
    }
    ?>
PHP 相关文章推荐
PHP5 字符串处理函数大全
Mar 23 PHP
php expects parameter 1 to be resource, array given 错误
Mar 23 PHP
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
Jun 05 PHP
深入PHP异步执行的详解
Jun 03 PHP
教你如何开启shopnc b2b2c 伪静态
Oct 21 PHP
Codeigniter(CI)框架分页函数及相关知识
Nov 03 PHP
Java和PHP在Web开发方面对比分析
Mar 01 PHP
php使用curl简单抓取远程url的方法
Mar 13 PHP
如何使用纯PHP实现定时器任务(Timer)
Jul 31 PHP
PHP错误和异常处理功能模块示例
Nov 12 PHP
iis 7下安装laravel 5.4环境的方法教程
Jun 14 PHP
PHP网页缓存技术优点及代码实例
Jul 29 PHP
一个PHP的ZIP压缩类分享
May 04 #PHP
PHP生成自定义长度随机字符串的函数分享
May 04 #PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
May 04 #PHP
PHP中使用FFMPEG获取视频缩略图和视频总时长实例
May 04 #PHP
PHP错误WARNING: SESSION_START() [FUNCTION.SESSION-START]解决方法
May 04 #PHP
PHP使用CURL获取302跳转后的地址实例
May 04 #PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
May 04 #PHP
You might like
在PHP中PDO解决中文乱码问题的一些补充
2010/09/06 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
2013/04/15 PHP
php字符串分割函数用法实例
2015/03/17 PHP
如何使用GDB调试PHP程序
2015/12/08 PHP
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
PHP文件与目录操作示例
2016/12/24 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
PHP实现QQ登录的开原理和实现过程
2018/02/04 PHP
Jqgrid设置全选(选择)及获取选择行的值示例代码
2013/12/28 Javascript
js控制div弹出层实现方法
2015/05/11 Javascript
基于JavaScript实现文字超出部分隐藏
2016/02/29 Javascript
jQuery图片左右滚动代码 有左右按钮实例
2016/06/20 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
2016/12/14 Javascript
使用JQ完成表格隔行换色的简单实例
2017/08/25 Javascript
JS 中使用Promise 实现红绿灯实例代码(demo)
2017/10/20 Javascript
基于bootstrap写的一点localStorage本地储存
2017/11/21 Javascript
Nginx 配置多站点vhost 的方法
2018/01/07 Javascript
详解JS数值Number类型
2018/02/07 Javascript
[05:10]2014DOTA2国际邀请赛 通往胜利之匙赛场探秘之旅
2014/07/18 DOTA
安装dbus-python的简要教程
2015/05/05 Python
Python通过select实现异步IO的方法
2015/06/04 Python
Python扩展内置类型详解
2018/03/26 Python
解决python 3 urllib 没有 urlencode 属性的问题
2019/08/22 Python
python+Django+pycharm+mysql 搭建首个web项目详解
2019/11/29 Python
Python使用eval函数执行动态标表达式过程详解
2020/10/17 Python
python 三种方法实现对Excel表格的读写
2020/11/19 Python
L’urv官网:精品女性运动服品牌
2019/07/07 全球购物
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
竞选团支书演讲稿
2014/04/28 职场文书
“四风”问题自我剖析材料思想汇报
2014/09/23 职场文书
个人债务授权委托书范本
2014/10/05 职场文书
2015年小学中秋节活动总结
2015/03/23 职场文书
交通事故案件代理词
2015/05/23 职场文书
搞笑的婚礼主持词
2015/06/29 职场文书
python 模拟在天空中放风筝的示例代码
2021/04/21 Python
jquery插件实现悬浮的菜单
2021/04/24 jQuery