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 相关文章推荐
CodeIgniter php mvc框架 中国网站
May 26 PHP
php 前一天或后一天的日期
Jun 28 PHP
PHP校验ISBN码的函数代码
Jan 17 PHP
php.ini修改php上传文件大小限制的方法详解
Jun 17 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
Oct 10 PHP
变量在 PHP7 内部的实现(二)
Dec 21 PHP
laravel学习教程之关联模型
Jul 30 PHP
PHP仿微信多图片预览上传实例代码
Sep 13 PHP
php写一个函数,实现扫描并打印出自定目录下(含子目录)所有jpg文件名
May 26 PHP
PHP中16个高危函数整理
Sep 19 PHP
PHP实现新型冠状病毒疫情实时图的实例
Feb 04 PHP
PHP之header函数详解
Mar 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简单定时执行任务的实现方法
2015/02/23 PHP
PHP编程中的__clone()方法使用详解
2015/11/27 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
2016/04/15 PHP
PHP实现生成推广海报的方法详解
2018/03/14 PHP
php防止表单重复提交实例讲解
2019/02/11 PHP
PHP中mysqli_get_server_version()的实例用法
2020/02/03 PHP
当鼠标移动时出现特效的JQuery代码
2013/11/08 Javascript
JavaScript中使用concat()方法拼接字符串的教程
2015/06/06 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
2016/05/09 Javascript
jQuery animate easing使用方法图文详解
2016/06/17 Javascript
AngularJS入门教程之Select(选择框)详解
2016/07/27 Javascript
Vue.js路由组件vue-router使用方法详解
2016/12/02 Javascript
详解Vue-基本标签和自定义控件
2017/03/24 Javascript
详解如何使用Node.js编写命令工具——以vue-cli为例
2017/06/29 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
2018/02/26 Javascript
.vue文件 加scoped 样式不起作用的解决方法
2018/05/28 Javascript
vue简单练习 桌面时钟的实现代码实例
2019/09/19 Javascript
JS自定义对象创建与简单使用方法示例
2020/01/15 Javascript
[43:24]VG vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[08:06]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant 选手采访
2021/03/11 DOTA
python实现挑选出来100以内的质数
2015/03/24 Python
django批量导入xml数据
2016/10/16 Python
Python字符编码与函数的基本使用方法
2017/09/30 Python
python实现图书借阅系统
2019/02/20 Python
python django 原生sql 获取数据的例子
2019/08/14 Python
Python imageio读取视频并进行编解码详解
2019/12/10 Python
python实现IOU计算案例
2020/04/12 Python
IE9下html5初试小刀
2010/09/21 HTML / CSS
世界上最大的折扣香水店:FragranceNet.com
2016/10/26 全球购物
英国在线药房:Express Chemist
2019/03/28 全球购物
卫生厅领导班子党的群众路线教育实践活动整改措施
2014/09/20 职场文书
用Python实现一个打字速度测试工具来测试你的手速
2021/05/28 Python
SpringBoot读取Resource下文件的4种方法
2021/07/02 Java/Android
MySQL基于索引的压力测试的实现
2021/11/07 MySQL
Go web入门Go pongo2模板引擎
2022/05/20 Golang