php如何判断文件是否存在,包括本地和远程文件
2013-08-09 10:58
1041 查看
1,当检查的文件是本地时用php自带的file_exists检查就行了,而此函数只能检查本地的函数是否存在,
所以如果要检查远程的文件是否存在只能用其它的方法了。
如果所服务器中php的配置开启了“allow_url_fopen =On”,即允许远端访问,那么也很简单,其实这个是php.ini中默认开启的,
用fopen函数判断就行了,能打开说明存在
如果allow_url_fopen =Off那么可以用socket通讯来解决
下面写的一个通用函数my_file_exists来检查文件是否存在
[php] view
plaincopy
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,
print?
3,
最简单的方法就是用fopen(),看看文件能否打开,能打就文件当然就存在。
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的用法
但是如果图片资源所在服务器挂掉了,这个函数会一直等待,所以我们需要一个备用方案。
CURL是个很好用的类库,下面看下如何用它来判断。
curl_exec()执行完之后如果文件不存在,会返回如下信息:
用正则看看是否有404,有的话文件就不存在。
所以如果要检查远程的文件是否存在只能用其它的方法了。
如果所服务器中php的配置开启了“allow_url_fopen =On”,即允许远端访问,那么也很简单,其实这个是php.ini中默认开启的,
用fopen函数判断就行了,能打开说明存在
如果allow_url_fopen =Off那么可以用socket通讯来解决
下面写的一个通用函数my_file_exists来检查文件是否存在
[php] view
plaincopy
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
print?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 | } |
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(filename,mode,include_path,context)
参数 | 描述 |
---|---|
filename | 必需。规定要打开的文件或 URL。 |
mode | 必需。规定要求到该文件/流的访问类型。可能的值见下表。 |
include_path | 可选。如果也需要在 include_path 中检索文件的话,可以将该参数设为 1 或 TRUE。 |
context | 可选。规定文件句柄的环境。Context 是可以修改流的行为的一套选项。 |
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 以及以后的版本所支持,仅能用于本地文件。 |
如果 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 , $url2 ); |
07 | curl_setopt( $ch , |
08 | curl_setopt ( $ch , |
09 | curl_setopt ( $ch , $timeout ); |
10 |
11 | $contents = curl_exec( $ch ); |
12 | //echo $contents; |
13 | if (preg_match( "/404/" , $contents )){ |
14 | echo '文件不存在' ; |
15 | } |
16 | ?> |
1 | HTTP/1.1 404 Not Found |
2 | Date : |
3 | Server: Apache |
4 | Accept-Ranges: bytes |
5 | Content-Length: 354 |
6 | Content-Type: text/html |
相关文章推荐
- php如何判断文件是否存在,包括本地和远程文件
- php如何判断文件是否存在,包括本地和远程文件
- php如何判断文件是否存在,包括本地和远程文件
- PHP如何判断远程图片文件是否存在
- PHP如何判断远程图片文件是否存在
- PHP如何判断远程图片文件是否存在
- php判断本地及远程文件是否存在
- PHP如何判断远程文件是否存在
- PHP如何判断远程图片文件是否存在
- PHP如何判断远程图片文件是否存在
- PHP如何判断远程图片文件是否存在
- PHP如何判断远程图片文件是否存在
- PHP如何判断远程图片文件是否存在
- PHP 判断远程或者本地文件是否存在
- PHP如何判断远程图片文件是否存在
- PHP判断远程图片或文件或url是否存在-180
- PHP get_headers函数判断远程文件是否存在
- PHP使用get_headers函数判断远程文件是否存在的方法
- php下利用curl判断远程文件是否存在的实现代码
- php判断文件夹或文件是否存在,及不存在时如何创建