文档章节

PHP如何判断远程图片文件是否存在

bengozhong
 bengozhong
发布于 2016/08/26 09:11
字数 1085
阅读 21
收藏 0

fopen()方法

最简单的方法就是用fopen(),看看文件能否打开,能打就文件当然就存在。

01 <?php
02 $url = 'http://www.nowamagic.net/images/test.jpg';
03  
04 if( @fopen( $url, 'r' ) )
05 {
06     echo 'File Exits';
07 }
08 else
09 {
10     echo 'File Do Not Exits';
11 }
12 ?>

fopen() 函数打开文件或者 URL。如果打开失败,函数会返回 FALSE。

语法:fopen(filename,mode,include_path,context)

参数 描述
filename 必需。规定要打开的文件或 URL。
mode 必需。规定要求到该文件/流的访问类型。可能的值见下表。
include_path 可选。如果也需要在 include_path 中检索文件的话,可以将该参数设为 1 或 TRUE。
context 可选。规定文件句柄的环境。Context 是可以修改流的行为的一套选项。

mode 参数的可能的值:

mode 说明
"r" 只读方式打开,将文件指针指向文件头。
"r+" 读写方式打开,将文件指针指向文件头。
"w" 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
"w+" 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
"a" 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
"a+" 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
"x" 创 建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。
"x+" 创建并以读写方式打开, 将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

fopen() 将 filename 指定的名字资源绑定到一个流上。如果 filename 是 "scheme://..." 的格式,则被当成一个 URL,PHP 将搜索协议处理器(也被称为封装协议)来处理此模式。如果该协议尚未注册封装协议,PHP 将发出一条消息来帮助检查脚本中潜在的问题并将 filename 当成一个普通的文件名继续执行下去。

如果 PHP 认为 filename 指定的是一个本地文件,将尝试在该文件上打开一个流。该文件必须是 PHP 可以访问的,因此需要确认文件访问权限允许该访问。如果激活了安全模式或者 open_basedir 则会应用进一步的限制。

如果 PHP 认为 filename 指定的是一个已注册的协议,而该协议被注册为一个网络 URL,PHP 将检查并确认 allow_url_fopen 已被激活。如果关闭了,PHP 将发出一个警告,而 fopen 的调用则失败。

一个fopen的用法

1 <?php
2 $file = fopen("test.txt","r");
3 $file = fopen("/home/test/test.txt","r");
4 $file = fopen("/home/test/test.gif","wb");
5 $file = fopen("http://www.example.com/","r");
6 $file = fopen("ftp://user:password@example.com/test.txt","w");
7 ?>

但是如果图片资源所在服务器挂掉了,这个函数会一直等待,所以我们需要一个备用方案。

CURL 方法

CURL是个很好用的类库,下面看下如何用它来判断。

01 <?php
02 $url2 = 'http://www.nowamagic.net/test.jpg';
03  
04 $ch = curl_init();
05 $timeout = 10;
06 curl_setopt ($ch, CURLOPT_URL, $url2);
07 curl_setopt($ch, CURLOPT_HEADER, 1);
08 curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
09 curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
10  
11 $contents = curl_exec($ch);
12 //echo $contents;
13 if (preg_match("/404/", $contents)){
14     echo '文件不存在';
15 }
16 ?>

curl_exec()执行完之后如果文件不存在,会返回如下信息:

1 HTTP/1.1 404 Not Found
2 Date: Tue, 14 Feb 2012 05:08:34 GMT
3 Server: Apache
4 Accept-Ranges: bytes
5 Content-Length: 354
6 Content-Type: text/html

用正则看看是否有404,有的话文件就不存在。

© 著作权归作者所有

bengozhong
粉丝 19
博文 476
码字总数 485469
作品 0
深圳
程序员
私信 提问
PHP判断远程图片或文件是否存在

PHP判断远程图片或文件是否存在的实现代码。 最简单的方法就是用fopen(),看看文件能否打开,能打就文件当然就存在。 <?php $url = 'http://www.jbxue.com/images/test.jpg'; if( @fopen( $...

mysoftsky
2014/03/05
0
0
判断远程图片是否存在的JavaScript代码

代码简介: 用JavaScript判断远程图片是否存在,不存在话则替换指定的图片,指定图片可以是你网站的LOGO或其它图片,或显示提示信息。没想到用JS还能干这种活,以前都是用笨方法,也就是用A...

未来十年
2012/01/07
0
0
UEditor编辑器两个版本任意文件上传漏洞分析

  前言   UEditor是一款所见即所得的开源富文本编辑器,具有轻量、可定制、用户体验优秀等特点,被广大WEB应用程序所使用。本次爆出的高危漏洞属于.NET版本,其它的版本暂时不受影响。漏...

FreeBuf
2018/08/22
0
0
PHP判断远程图片或文件或url是否存在-180

我通常使用curl判断判断远程图片或文件是否存在: /** * @link http://www.phpddt.com */ function url_exists($url) { $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); //不下载......

DaddysGirl
2018/06/29
0
0
php实现图片上传并进行替换操作

这篇文章主要为大家详细介绍了php实现图片上传并进行替换操作,讲解的很详细,通俗易懂,感兴趣的小伙伴们可以参考一下 首先建立两个文件: change.html 和 change.php change.html 文件的表...

zyt_1978
2016/03/16
15
0

没有更多内容

加载失败,请刷新页面

加载更多

rsync工具常用选项以及同步的两种方式

rsync -av /etc/passwd /tmp/1.txt #rsync的本机传输写法 rsync -av /tmp/1.txt 192.168.188.128:/tmp/2.txt #rsync的远程传输rsync格式rsync [OPTION] … SRC ......

林怡丰
今天
3
0
GatewayWorker 报错:stream_socket_server(): unable to connect to tcp://0.0.0.0:1238

GatewayWorker 报错:stream_socket_server(): unable to connect to tcp://0.0.0.0:1238 (Address already in use) 官方文档虽然有相同的问题,但是对我的问题没起作用…… 后面发现自己手贱...

wenzhizhong
昨天
3
0
REST接口

文章来源 https://zhuanlan.zhihu.com/p/28674721?group_id=886181549958119424 http://www.ruanyifeng.com/blog/2014/05/restful_api.html REST 对请求的约定 REST 用来规范应用如何在 HTTP......

Airship
昨天
5
0
Spring Cloud Config 统一配置中心

Spring Cloud Config 统一配置中心 一、统一配置中心 统一管理配置 通常,我们会使用配置文件来管理应用的配置。如一个 Spring Boot 的应用,可以将配置信息放在 application.yml 文件中,如...

非摩尔根
昨天
6
0
android ------ AAPT2 error: check logs for details解决方法

AAPT 是全称是 Android Asset Packaging Tool,它是构建 App,甚至是构建 Android 系统都必不可少的一个工具。它的作用是将所有资源文件压缩打包到Android APK 当中。我们在 Android SDK 目录...

切切歆语
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部