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 相关文章推荐
实现dedecms全站URL静态化改造的代码
Mar 29 PHP
纯真IP数据库的应用 IP地址转化成十进制
Jun 14 PHP
php 生成饼图 三维饼图
Sep 28 PHP
PHP获取url的函数代码
Aug 02 PHP
探讨各种PHP字符串函数的总结分析
Jun 05 PHP
PHP实现图片裁剪、添加水印效果代码
Oct 01 PHP
phpnow php探针环境检测代码
Nov 04 PHP
php微信公众号开发之翻页查询
Oct 20 PHP
Yii2 queue的队列使用详解
Jul 19 PHP
PHP架构及原理知识点详解
Dec 22 PHP
Laravel 框架路由原理与路由访问实例分析
Apr 14 PHP
PHP日期和时间函数的使用示例详解
Aug 06 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面向对象分析设计的61条军规小结
2010/07/17 PHP
php中mysql模块部分功能的简单封装
2011/09/30 PHP
PHP下使用CURL方式POST数据至API接口的代码
2013/02/14 PHP
如何利用预加载优化Laravel Model查询详解
2017/08/11 PHP
PHP实现的多进程控制demo示例
2019/07/22 PHP
php报错502badgateway解决方法
2019/10/11 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
JavaScript中void(0)的具体含义解释
2007/02/27 Javascript
最简单的jQuery程序 入门者学习
2009/07/09 Javascript
向大师们学习Javascript(视频与PPT)
2009/12/27 Javascript
JQuery学习笔记 nt-child的使用
2011/01/17 Javascript
Grid得到选择行数据的方法总结
2011/01/17 Javascript
JavaScript继承模式粗探
2016/01/12 Javascript
基于JavaScript实现回到页面顶部动画代码
2016/05/24 Javascript
JS从一组数据中找到指定的单条数据的方法
2016/06/02 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
2018/08/18 Javascript
vue实现的双向数据绑定操作示例
2018/12/04 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
uni-app之APP和小程序微信授权方法
2019/05/09 Javascript
基于纯JS实现多张图片的懒加载Lazy过程解析
2019/10/14 Javascript
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
2020/07/15 Javascript
JS寄快递地址智能解析的实现代码
2020/07/16 Javascript
vue实现验证用户名是否可用
2021/01/20 Vue.js
python 判断自定义对象类型
2009/03/21 Python
Python时间获取及转换知识汇总
2017/01/11 Python
Python计时相关操作详解【time,datetime】
2017/05/26 Python
python 筛选数据集中列中value长度大于20的数据集方法
2018/06/14 Python
PyQt5固定窗口大小的方法
2019/06/18 Python
python、Matlab求定积分的实现
2019/11/20 Python
没编程基础可以学python吗
2020/06/17 Python
Keras loss函数剖析
2020/07/06 Python
办公室主任主任岗位责任制
2014/02/11 职场文书
《叶问2》观后感
2015/06/15 职场文书
呼兰河传读书笔记
2015/06/30 职场文书
家访教师心得体会
2016/01/23 职场文书
MySQL学习之基础命令实操总结
2022/03/19 MySQL