php如何判断文件是否存在,包括本地和远程文件
来源:互联网 发布:java接口的使用 编辑:程序博客网 时间:2024/05/13 04:20
1,当检查的文件是本地时用php自带的file_exists检查就行了,而此函数只能检查本地的函数是否存在,
所以如果要检查远程的文件是否存在只能用其它的方法了。
如果所服务器中php的配置开启了“allow_url_fopen = On”,即允许远端访问,那么也很简单,其实这个是php.ini中默认开启的,
用fopen函数判断就行了,能打开说明存在
如果allow_url_fopen = Off那么可以用socket通讯来解决
下面写的一个通用函数my_file_exists来检查文件是否存在
- function my_file_exists($file)
- {
- if(preg_match('/^http:\/\//',$file)){
- //远程文件
- if(ini_get('allow_url_fopen')){
- if(@fopen($file,'r')) return true;
- }
- else{
- $parseurl=parse_url($file);
- $host=$parseurl['host'];
- $path=$parseurl['path'];
- $fp=fsockopen($host,80, $errno, $errstr, 10);
- if(!$fp)return false;
- fputs($fp,"GET {$path} HTTP/1.1 \r\nhost:{$host}\r\n\r\n");
- if(preg_match('/HTTP\/1.1 200/',fgets($fp,1024))) return true;
- }
- return false;
- }
- return file_exists($file);
- }
现在就可以调用此函数来检查文件的存在性,而不用去考虑是远程还是本地文件,或者是否禁用了allow_url_open
2,
view source
1
$file
=
"http://www.oschina.net/demo/file_exists.zip"
;
2
$fileExists
= @
file_get_contents
(
$file
,null,null,-1,1) ? true : false ;
3
4
if
(
$fileExists
){
5
echo
"File Exists!"
;
6
}
else
{
7
echo
"Sorry, we couldn't find the file."
;
8
}
3,
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)
mode 参数的可能的值:
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,有的话文件就不存在。
- php如何判断文件是否存在,包括本地和远程文件
- php如何判断文件是否存在,包括本地和远程文件
- php如何判断文件是否存在,包括本地和远程文件
- php如何判断文件是否存在,包括本地和远程文件
- PHP如何判断远程文件是否存在
- php判断本地及远程文件是否存在
- PHP如何判断远程图片文件是否存在
- PHP如何判断远程图片文件是否存在
- PHP如何判断远程图片文件是否存在
- [转]php判断远程文件是否存在
- PHP 判断远程图片文件是否存在
- PHP如何判断文件、目录是否存在?
- 判断远程文件是否存在。、
- 判断远程文件是否存在
- 判断远程文件是否存在
- 判断远程文件是否 存在
- 判断远程文件是否存在的php函数
- 判断远程文件是否存在的php函数
- javascript-array函数实例
- jQuery最佳实践
- ARM Device Tree起源
- perl closure
- Java7 部分新特性备忘录
- php如何判断文件是否存在,包括本地和远程文件
- Linux中与驱动相关的ioctl函数
- 为什么要 Class.forName( driverClass );
- SVN命令使用细究
- android intent和intent action大全
- Win7 IIS 不能調試的問題。
- SocketAsyncEventArgs类的使用和详细说明 .
- vc操纵mysql数据库
- Windows下Android开发环境配置