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 相关文章推荐
第十节 抽象方法和抽象类 [10]
Oct 09 PHP
php print EOF实现方法
May 21 PHP
PHP中全局变量global和$GLOBALS[]的区别分析
Aug 06 PHP
php shell超强免杀、减少体积工具实现代码
Oct 16 PHP
ThinkPHP3.1新特性之字段合法性检测详解
Jun 19 PHP
PHP中调用SVN命令更新网站方法
Jan 07 PHP
php中关于socket的系列函数总结
May 18 PHP
PHP简单的MVC框架实现方法
Dec 01 PHP
php模板引擎技术简单实现
Mar 15 PHP
PHP MSSQL 分页实例
Apr 13 PHP
thinkphp,onethink和thinkox中验证码不显示的解决方法分析
Jun 06 PHP
ajax+php实现无刷新验证手机号的实例
Dec 22 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
30个php操作redis常用方法代码例子
2014/07/05 PHP
php自定文件保存session的方法
2014/12/10 PHP
PHP 7.0.2 正式版发布
2016/01/08 PHP
用js脚本控制asp.net下treeview的NodeCheck的实现代码
2010/03/02 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
2013/04/11 Javascript
jquery浏览器滚动加载技术实现方案
2014/06/03 Javascript
javascript for-in有序遍历json数据并探讨各个浏览器差异
2015/11/30 Javascript
JavaScript数组的一些奇葩行为
2016/01/25 Javascript
JavaScript 不支持 indexof 该如何解决
2016/03/30 Javascript
Angular.Js中过滤器filter与自定义过滤器filter实例详解
2017/05/08 Javascript
微信小程序实现订单倒计时
2020/11/01 Javascript
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
js异步接口并发数量控制的方法示例
2020/11/22 Javascript
python+mysql实现简单的web程序
2014/09/11 Python
利用Python中的mock库对Python代码进行模拟测试
2015/04/16 Python
举例讲解Python中的身份运算符的使用方法
2015/10/13 Python
只需7行Python代码玩转微信自动聊天
2019/01/27 Python
python Tkinter版学生管理系统
2019/02/20 Python
使用python实现ftp的文件读写方法
2019/07/02 Python
python版百度语音识别功能
2019/07/09 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
2019/08/26 Python
Python3如何判断三角形的类型
2020/04/12 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
2020/06/02 Python
Python基于staticmethod装饰器标示静态方法
2020/10/17 Python
css3 中的新特性加强记忆详解
2016/04/16 HTML / CSS
HTML5页面嵌入小程序没有返回按钮及返回页面空白的问题
2020/05/28 HTML / CSS
戴尔美国官网:Dell
2016/08/31 全球购物
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
方正Java笔试题
2014/07/03 面试题
医学专业毕业生个人求职信
2013/12/25 职场文书
大学生新学期计划书
2014/04/28 职场文书
工地质量标语
2014/06/12 职场文书
模具专业求职信
2014/06/26 职场文书
2015年中学元旦晚会活动方案
2014/12/09 职场文书
初中学生操行评语
2014/12/26 职场文书
建筑质检员岗位职责
2015/04/08 职场文书