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中的 == 运算符进行字符串比较
Nov 26 PHP
PHP下利用header()函数设置浏览器缓存的代码
Sep 01 PHP
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
Jul 18 PHP
PHP学习散记_编码(json_encode 中文不显示)
Nov 10 PHP
php排序算法(冒泡排序,快速排序)
Oct 09 PHP
PHP生成随机用户名和密码的实现代码
Feb 27 PHP
用 Composer构建自己的 PHP 框架之构建路由
Oct 30 PHP
PHP内存缓存Memcached类实例
Dec 08 PHP
thinkphp修改配置进入默认首页的方法
Feb 07 PHP
学习thinkphp5.0验证类使用方法
Nov 16 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
Apr 08 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 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
PHP4实际应用经验篇(6)
2006/10/09 PHP
php empty()与isset()区别的详细介绍
2013/06/17 PHP
Laravel5.1 框架响应基本用法实例分析
2020/01/04 PHP
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
2011/06/27 Javascript
Javascript简单实现可拖动的div
2013/10/22 Javascript
jQuery实现分隔条左右拖动功能
2015/11/21 Javascript
js与jQuery实现checkbox复选框全选/全不选的方法
2016/01/05 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
2016/02/25 Javascript
JS组件Bootstrap Table使用实例分享
2016/05/30 Javascript
使用ionic切换页面卡顿的解决方法
2016/12/16 Javascript
原生Javascript插件开发实践
2017/01/09 Javascript
Bootstrap实现各种进度条样式详解
2017/04/13 Javascript
初探JavaScript 面向对象(推荐)
2017/09/03 Javascript
使用JQuery实现图片轮播效果的实例(推荐)
2017/10/24 jQuery
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
2017/11/28 Javascript
解决前后端分离 vue+springboot 跨域 session+cookie失效问题
2019/05/13 Javascript
vue单页应用的内存泄露定位和修复问题小结
2019/08/02 Javascript
React学习之JSX与react事件实例分析
2020/01/06 Javascript
JavaScript设计模型Iterator实例解析
2020/01/22 Javascript
jQuery实现动态向上滚动
2020/12/21 jQuery
vue+openlayers绘制省市边界线
2020/12/24 Vue.js
Python完全新手教程
2007/02/08 Python
用python一行代码得到数组中某个元素的个数方法
2019/01/28 Python
Python时间序列缺失值的处理方法(日期缺失填充)
2019/08/11 Python
python模块导入的方法
2019/10/24 Python
Python tcp传输代码实例解析
2020/03/18 Python
python用TensorFlow做图像识别的实现
2020/04/21 Python
css3和jquery实现自定义checkbox和radiobox组件
2014/04/22 HTML / CSS
彪马荷兰官网:PUMA荷兰
2019/05/08 全球购物
手工制作的男士奢华英国鞋和服装之家:Goodwin Smith
2019/06/21 全球购物
师范生实习自我鉴定
2013/11/01 职场文书
社区学习雷锋活动总结
2014/04/25 职场文书
党的群众路线教育实践活动心得体会(医院)
2014/11/03 职场文书
MYSQL数据库使用UTF-8中文编码乱码的解决办法
2021/05/26 MySQL
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
2021/06/07 Python
JS实现简单的九宫格抽奖
2022/06/28 Javascript