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 编写的 25个游戏脚本
May 11 PHP
php数字转汉字代码(算法)
Oct 08 PHP
php中使用接口实现工厂设计模式的代码
Jun 17 PHP
网页上facebook分享功能具体实现
Jan 26 PHP
PHP会话处理的10个函数
Aug 11 PHP
thinkphp如何获取客户端IP
Nov 03 PHP
yii2中使用Active Record模式的方法
Jan 09 PHP
php文件上传的两种实现方法
Apr 04 PHP
基于PHP实现短信验证码接口(容联运通讯)
Sep 06 PHP
让ThinkPHP的模板引擎达到最佳效率的方法详解
Mar 14 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
Dec 25 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
Apr 04 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
oracle资料库函式库
2006/10/09 PHP
安装apache2.2.22配置php5.4(具体操作步骤)
2013/06/26 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
在php7中MongoDB实现模糊查询的方法详解
2017/05/03 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
PHP实现简单用户登录界面
2019/10/23 PHP
JavaScript入门教程 Cookies
2009/01/31 Javascript
javascript 打印页面代码
2009/03/24 Javascript
jquery对表单操作2
2011/04/06 Javascript
jQuery调用AJAX时Get和post公用的乱码解决方法实例说明
2013/06/04 Javascript
jQuery Ajax Post 回调函数不执行问题的解决方法
2016/08/15 Javascript
原生JS取代一些JQuery方法的简单实现
2016/09/20 Javascript
浅谈Javascript中的函数、this以及原型
2016/10/09 Javascript
JS实现匀加速与匀减速运动的方法示例
2017/09/04 Javascript
Vue.js项目模板搭建图文教程
2017/09/20 Javascript
解决IE11 vue +webpack 项目中数据更新后页面没有刷新的问题
2018/09/25 Javascript
angular 用Observable实现异步调用的方法
2018/12/27 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
Openlayers学习之加载鹰眼控件
2020/09/28 Javascript
Python常见加密模块用法分析【MD5,sha,crypt模块】
2017/05/24 Python
利用Python操作消息队列RabbitMQ的方法教程
2017/07/19 Python
对Python正则匹配IP、Url、Mail的方法详解
2018/12/25 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
2019/08/05 Python
django将网络中的图片,保存成model中的ImageField的实例
2019/08/07 Python
python中几种自动微分库解析
2019/08/29 Python
cookies应对python反爬虫知识点详解
2020/11/25 Python
First Aid Beauty官网:FAB急救面霜
2018/05/24 全球购物
中国领先的汽车保养服务平台:途虎养车
2019/10/18 全球购物
what is the difference between ext2 and ext3
2013/11/03 面试题
学前教育教师求职自荐信
2013/09/22 职场文书
小学教师的个人自我鉴定
2013/10/26 职场文书
党员群众路线整改措施及今后努力方向
2014/10/28 职场文书
交流会主持词
2015/07/02 职场文书
运动会广播稿300字
2015/08/19 职场文书
Python requests库参数提交的注意事项总结
2021/03/29 Python
PyMongo 查询数据的实现
2021/06/28 Python