您的位置:首页 > 编程语言 > PHP开发

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

2013-03-26 11:47 831 查看

fopen()方法

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

viewsource

print?

01
<?php
02
$url
=
'http://www.nowamagic.net/images/test.jpg'
;
03
04
if
(@
fopen
(
$url
,
'r'

))
05
{
06
echo

'FileExits'
;
07
}
08
else
09
{
10
echo

'FileDoNotExits'
;

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标记是等价的。此选项被PHP4.3.2以及以后的版本所支持,仅能用于本地文件。
"x+"创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则fopen()调用失败并返回FALSE,并生成一条E_WARNING级别的错误信息。如果文件不存在则尝试创建之。这和给底层的open(2)系统调用指定O_EXCL|O_CREAT标记是等价的。此选项被PHP4.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的用法

viewsource

print?

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是个很好用的类库,下面看下如何用它来判断。

viewsource

print?

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()执行完之后如果文件不存在,会返回如下信息:

viewsource

print?

1
HTTP/1.1404NotFound
2
Date
:Tue,14Feb201205:08:34GMT
3
Server:Apache
4
Accept-Ranges:bytes
5
Content-Length:354
6
Content-Type:text/html
用正则看看是否有404,有的话文件就不存在。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: