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 相关文章推荐
php学习笔记 类的声明与对象实例化
Jun 13 PHP
wamp下修改mysql访问密码的解决方法
May 07 PHP
PHP运行模式的深入理解
Jun 03 PHP
IIS6.0中配置php服务全过程解析
Aug 07 PHP
PHP函数strip_tags的一个bug浅析
May 22 PHP
THINKPHP项目开发中的日志记录实例分析
Dec 01 PHP
ThinkPHP 404页面的设置方法
Jan 14 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
May 27 PHP
php使用Jpgraph绘制柱形图的方法
Jun 10 PHP
PHP远程调试之XDEBUG
Dec 29 PHP
php fseek函数读取大文件两种方法
Oct 12 PHP
YII框架批量插入数据的方法
Mar 18 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实现可逆加密的方法
2015/08/11 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
2016/11/28 PHP
php实现的redis缓存类定义与使用方法示例
2017/08/09 PHP
PHP正则表达式笔记与实例详解
2019/05/09 PHP
使用SMB共享来绕过php远程文件包含的限制执行RFI的利用
2019/05/31 PHP
PHP如何防止用户重复提交表单
2020/12/09 PHP
指定js可访问其它域名的cookie的方法
2007/09/18 Javascript
JS解密入门之凭直觉解
2008/06/25 Javascript
jquery实现鼠标拖动图片效果示例代码
2014/01/09 Javascript
JavaScript设计模式之建造者模式介绍
2014/12/28 Javascript
JQuery调用绑定click事件的3种写法
2015/03/28 Javascript
Juery解决tablesorter中文排序和字符范围的方法
2015/05/06 Javascript
JavaScript原生对象常用方法总结(推荐)
2016/05/13 Javascript
PHP捕捉异常中断的方法
2016/10/24 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
2017/06/04 Javascript
详解vue+vueRouter+webpack的简单实例
2017/06/17 Javascript
详解vue-property-decorator使用手册
2019/07/29 Javascript
原生js代码能实现call和bind吗
2019/07/31 Javascript
Javascript实现贪吃蛇小游戏(含详细注释)
2020/10/23 Javascript
跟老齐学Python之玩转字符串(1)
2014/09/14 Python
在Python中利用Into包整洁地进行数据迁移的教程
2015/03/30 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
2017/08/30 Python
python中set()函数简介及实例解析
2018/01/09 Python
Python3之读取连接过的网络并定位的方法
2018/04/22 Python
python模拟表单提交登录图书馆
2018/04/27 Python
Flask框架Flask-Login用法分析
2018/07/23 Python
浅谈django2.0 ForeignKey参数的变化
2019/08/06 Python
美国婴童服装市场上的领先品牌:Carter’s
2018/02/08 全球购物
介绍一下Ruby的特点
2013/01/20 面试题
挖掘机司机岗位职责
2014/02/12 职场文书
党课培训主持词
2014/04/01 职场文书
五年级学生期末评语
2014/12/26 职场文书
2015年公民道德宣传日活动总结
2015/03/23 职场文书
会议主持词通用版
2019/04/02 职场文书
2019年图书室自查报告范本
2019/10/12 职场文书
python如何读取和存储dict()与.json格式文件
2022/06/25 Python