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动态创建Flash动画
Oct 09 PHP
浅析PHP Socket技术
Aug 02 PHP
Zend Framework页面缓存实例
Jun 25 PHP
PHP函数in_array()使用详解
Aug 20 PHP
PHP实现模仿socket请求返回页面的方法
Nov 04 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
Jan 08 PHP
CodeIgniter扩展核心类实例详解
Jan 20 PHP
PHP中类的继承和用法实例分析
May 24 PHP
php 如何获取文件的后缀名
Jun 05 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
Aug 19 PHP
php flush无效,IIS7下php实时输出的方法
Aug 25 PHP
Thinkphp5.0框架视图view的循环标签用法示例
Oct 12 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用ini_get获取php.ini里变量值的方法
2015/03/04 PHP
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
2013/06/19 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
2014/09/03 Javascript
jQuery中index()方法用法实例
2014/12/27 Javascript
AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录
2015/01/02 Javascript
使用纯javascript实现经典扫雷游戏
2015/04/23 Javascript
Jquery插件仿百度搜索关键字自动匹配功能
2016/05/11 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
2017/01/05 Javascript
Bootstrap表单控件使用方法详解
2017/01/11 Javascript
无法获取隐藏元素宽度和高度的解决方案
2017/03/07 Javascript
nodejs动态创建二维码的方法
2017/08/12 NodeJs
NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】
2017/09/06 NodeJs
vue中for循环更改数据的实例代码(数据变化但页面数据未变)
2017/09/15 Javascript
实现两个文本框同时输入的实例
2017/09/25 Javascript
react+redux的升级版todoList的实现
2017/12/18 Javascript
JavaScript对象拷贝与Object.assign用法实例分析
2018/06/20 Javascript
angular1.x ui-route传参的三种写法小结
2018/08/31 Javascript
webpack3.0升级4.0的方法步骤
2020/04/02 Javascript
[55:45]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.24
2019/09/10 DOTA
Python cookbook(数据结构与算法)对切片命名清除索引的方法
2018/03/13 Python
python 设置输出图像的像素大小方法
2019/07/04 Python
python多进程(加入进程池)操作常见案例
2019/10/21 Python
python中什么是面向对象
2020/06/11 Python
Flesh Beauty官网:露华浓集团旗下彩妆品牌
2021/02/15 全球购物
通息工程毕业生自荐信
2013/10/16 职场文书
药品质量检测应届生求职信
2013/11/14 职场文书
城建学院毕业生自荐信
2014/01/31 职场文书
运动会解说词200字
2014/02/06 职场文书
护理助产毕业生的求职信
2014/03/02 职场文书
电子信息工程自荐信
2014/05/26 职场文书
一份关于丢失公司财物的检讨书
2014/09/19 职场文书
工作保证书
2015/01/17 职场文书
三峡导游词
2015/01/31 职场文书
聘任证明怎么写
2015/03/02 职场文书
送给火锅店的创意营销方案!
2019/07/08 职场文书
MySQL慢查询的坑
2021/04/28 MySQL