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 相关文章推荐
信用卡效验程序
Oct 09 PHP
php站内搜索并高亮显示关键字的实现代码
Dec 29 PHP
PHP使用array_merge重新排列数组下标的方法
Jul 22 PHP
thinkphp中AJAX返回ajaxReturn()方法分析
Dec 06 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
Apr 05 PHP
PHP策略模式定义与用法示例
Jul 27 PHP
php微信开发之谷歌测距
Jun 14 PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
Mar 08 PHP
PHP实现获取url地址中顶级域名的方法示例
Jun 05 PHP
Laravel 5.5 实现禁用用户注册示例
Oct 24 PHP
浅析PHP echo 和 print 语句
Jun 30 PHP
open_basedir restriction in effect. 原因与解决方法
Mar 14 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禁止页面缓存的代码
2011/10/23 PHP
php实现图片局部打马赛克的方法
2015/02/11 PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
2016/03/01 PHP
document.documentElement &amp;&amp; document.documentElement.scrollTop
2007/12/01 Javascript
IE8 中使用加速器(Activities)
2010/05/14 Javascript
最新28个很棒的jQuery 教程
2011/05/28 Javascript
Jquery显示、隐藏元素以及添加删除样式
2013/08/09 Javascript
Array 重排序方法和操作方法的简单实例
2014/01/24 Javascript
js调试系列 源码定位与调试[基础篇]
2014/06/18 Javascript
EasyUI实现第二层弹出框的方法
2015/03/01 Javascript
Angular页面间切换及传值的4种方法
2016/11/04 Javascript
es6学习笔记之Async函数基本教程
2017/05/11 Javascript
JS+H5 Canvas实现时钟效果
2018/07/20 Javascript
vue里如何主动销毁keep-alive缓存的组件
2019/03/21 Javascript
jquery登录的异步验证操作示例
2019/05/09 jQuery
javascript面向对象三大特征之多态实例详解
2019/07/24 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
javascript实现时间日期的格式化的方法汇总
2020/08/06 Javascript
使用PYTHON创建XML文档
2012/03/01 Python
使用Python读写及压缩和解压缩文件的示例
2016/07/08 Python
matplotlib调整子图间距,调整整体空白的方法
2018/08/03 Python
漂亮的Django Markdown富文本app插件的实现
2019/01/02 Python
python开发游戏的前期准备
2019/05/05 Python
Python3直接爬取图片URL并保存示例
2019/12/18 Python
django为Form生成的label标签添加class方式
2020/05/20 Python
详解利用css3的var()实现运行时改变scss的变量值
2021/03/02 HTML / CSS
Tod’s英国官方网站:意大利奢华手工制作手袋和鞋履
2019/03/15 全球购物
请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值
2014/09/15 面试题
简历中求职的个人自我评价
2013/12/03 职场文书
食堂个人先进事迹
2014/01/22 职场文书
英文请假条
2014/04/11 职场文书
竞选学生会演讲稿
2014/04/25 职场文书
甜品店创业计划书
2014/08/14 职场文书
应届生简历自我评价
2015/03/11 职场文书
党员“一帮一”活动总结
2015/05/07 职场文书
Java 超详细讲解十大排序算法面试无忧
2022/04/08 Java/Android