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面向对象编程快速入门
Oct 09 PHP
小偷PHP+Html+缓存
Nov 25 PHP
逐步提升php框架的性能
Jan 10 PHP
php快速url重写 更新版[需php 5.30以上]
Apr 20 PHP
PHP fopen 读取带中文URL地址的一点见解
Sep 25 PHP
php curl的深入解析
Jun 02 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
Jun 13 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
Sep 28 PHP
php json与xml序列化/反序列化
Oct 28 PHP
php实现贪吃蛇小游戏
Jul 26 PHP
详解php中serialize()和unserialize()函数
Jul 08 PHP
PHP的静态方法与普通方法用法实例分析
Sep 26 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
Ajax+PHP边学边练 之五 图片处理
2009/12/03 PHP
jquery中ajax调用json数据的使用说明
2011/03/17 Javascript
使用 JScript 创建 .exe 或 .dll 文件的方法
2011/07/13 Javascript
javascript标签在页面中的位置探讨
2013/04/11 Javascript
jquery中post方法用法实例
2014/10/21 Javascript
jQuery使用之设置元素样式用法实例
2015/01/19 Javascript
js实现鼠标经过时图片滚动停止的方法
2015/02/16 Javascript
Vue监听数组变化源码解析
2017/03/09 Javascript
js图片放大镜效果实现方法详解
2020/10/28 Javascript
JS轮播图实现简单代码
2021/02/19 Javascript
详解Vue2 SSR 缓存 Api 数据
2017/11/20 Javascript
vue axios数据请求get、post方法及实例详解
2018/09/11 Javascript
layui实现数据分页功能(ajax异步)
2019/07/27 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
js实现幻灯片轮播图
2020/08/14 Javascript
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
python基础教程之udp端口扫描
2014/02/10 Python
Python的面向对象编程方式学习笔记
2016/07/12 Python
Python对列表去重的多种方法(四种方法)
2017/12/05 Python
对python自动生成接口测试的示例讲解
2018/11/30 Python
python使用PyQt5的简单方法
2019/02/27 Python
Python3.5集合及其常见运算实例详解
2019/05/01 Python
python常用排序算法的实现代码
2019/11/08 Python
Python 给下载文件显示进度条和下载时间的实现
2020/04/02 Python
python 利用matplotlib在3D空间绘制二次抛物面的案例
2021/02/06 Python
CSS3 选择器 属性选择器介绍
2012/01/21 HTML / CSS
Marmot土拨鼠官网:美国专业户外运动品牌
2018/01/11 全球购物
eVitamins日本:在线购买折扣维生素、补品和草药
2019/04/04 全球购物
如何在Cookie里面保存Unicode和国际化字符
2013/05/25 面试题
最受欢迎的自我评价
2013/12/22 职场文书
如何写股份合作协议书
2014/09/11 职场文书
企业与个人合作经营协议书
2014/11/01 职场文书
2015民办小学年度工作总结
2015/05/26 职场文书
导游词之开封禹王台风景区
2019/12/02 职场文书
浅谈如何提高PHP代码质量之单元测试
2021/05/28 PHP
win10以太网连接不上怎么办?Win10连接以太网详细教程
2022/04/08 数码科技