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集成FCK的函数代码
Sep 27 PHP
php构造函数实例讲解
Nov 13 PHP
zf框架的session会话周期及次数限制使用示例
Mar 13 PHP
php检测数组长度函数sizeof与count用法
Nov 17 PHP
PHP动态输出JavaScript代码实例
Feb 12 PHP
thinkphp autoload 命名空间自定义 namespace
Jul 17 PHP
PHP图形操作之Jpgraph学习笔记
Dec 25 PHP
PHP实现的折半查询算法示例
Oct 09 PHP
Laravel框架验证码类用法实例分析
Sep 11 PHP
PHP实现单条sql执行多个数据的insert语句方法
Oct 11 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
Oct 18 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
May 02 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下打开URL地址的几种方法小结
2010/05/16 PHP
输入值/表单提交参数过滤有效防止sql注入的方法
2013/12/25 PHP
ASP和PHP实现生成网站快捷方式并下载到桌面的方法
2014/05/08 PHP
windows下apache搭建php开发环境
2015/08/27 PHP
PHP获取网页所有连接的方法(附demo源码下载)
2016/03/30 PHP
Thinkphp3.2实用篇之计算型验证码示例
2017/02/09 PHP
Laravel学习教程之本地化模块
2017/08/18 PHP
Javascript 变量作用域 两个可能会被忽略的小特性
2010/03/23 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件。
2011/12/26 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
jQuery实现大转盘抽奖活动仿QQ音乐代码分享
2015/08/21 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
2015/11/24 Javascript
BootStrap的弹出框(Popover)支持鼠标移到弹出层上弹窗层不隐藏的原因及解决办法
2016/04/03 Javascript
BootStrap中Table分页插件使用详解
2016/10/09 Javascript
JQuery 进入页面默认给已赋值的复选框打钩
2017/03/23 jQuery
Angular.js去除页面中显示的空行方法示例
2017/03/30 Javascript
ReactNative短信验证码倒计时控件的实现代码
2017/07/20 Javascript
layui 给数据表格加序号的方法
2018/08/20 Javascript
vue实现点击选中,其他的不选中方法
2018/09/05 Javascript
vue实现密码显示与隐藏按钮的自定义组件功能
2019/04/23 Javascript
python下如何让web元素的生成更简单的分析
2008/07/17 Python
详解Python中的array数组模块相关使用
2016/07/05 Python
Python中取整的几种方法小结
2017/01/06 Python
python如何让类支持比较运算
2018/03/20 Python
python中的turtle库函数简单使用教程
2018/07/23 Python
在django模板中实现超链接配置
2019/08/21 Python
python字符串的拼接方法总结
2019/11/18 Python
如何用python处理excel表格
2020/06/09 Python
留学自荐信
2013/10/10 职场文书
大学校务公开实施方案
2014/03/31 职场文书
小小商店教学反思
2014/04/27 职场文书
模具专业自荐信
2014/05/29 职场文书
老公婚前保证书
2015/02/28 职场文书
千与千寻观后感
2015/06/04 职场文书
盲山观后感
2015/06/11 职场文书
幼儿园托班开学寄语(2016春季)
2015/12/03 职场文书