php中检查文件或目录是否存在的代码小结


Posted in PHP onOctober 22, 2012

下面是一个简单的检查文件是否存在的实例代码:

<?php 
$filename = '/path/to/foo.txt'; 
if (file_exists($filename)) { 
echo "The file $filename exists"; 
} else { 
echo "The file $filename does not exist"; 
} 
?>

如果文件存在,执行该 PHP 文件的显示结果是:
The file C:blablaphphello.txt exists.
如果文件不存在,执行该 PHP 文件的显示结果是:
The file C:\blabla\phphello.txt does not exist.
你也可以用file_exists 函数测试某个目录是否存在,示例代码如下:
if (file_exists("C:\blabla\php")) 
{echo "yes";} 
else 
{echo "no";}

实例
/** 
* 文件或目录权限检查函数 
* 
* @access public 
* @param string $file_path 文件路径 
* @param bool $rename_prv 是否在检查修改权限时检查执行rename()函数的权限 
* 
* @return int 返回值的取值范围为{0 <= x <= 15},每个值表示的含义可由四位二进制数组合推出。 
* 返回值在二进制计数法中,四位由高到低分别代表 
* 可执行rename()函数权限、可对文件追加内容权限、可写入文件权限、可读取文件权限。 
*/ 
function file_mode_info($file_path) 
{ 
/* 如果不存在,则不可读、不可写、不可改 */ 
if (!file_exists($file_path)) 
{ 
return false; 
} 
$mark = 0; 
if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') 
{ 
/* 测试文件 */ 
$test_file = $file_path . '/cf_test.txt'; 
/* 如果是目录 */ 
if (is_dir($file_path)) 
{ 
/* 检查目录是否可读 */ 
$dir = @opendir($file_path); 
if ($dir === false) 
{ 
return $mark; //如果目录打开失败,直接返回目录不可修改、不可写、不可读 
} 
if (@readdir($dir) !== false) 
{ 
$mark ^= 1; //目录可读 001,目录不可读 000 
} 
@closedir($dir); 
/* 检查目录是否可写 */ 
$fp = @fopen($test_file, 'wb'); 
if ($fp === false) 
{ 
return $mark; //如果目录中的文件创建失败,返回不可写。 
} 
if (@fwrite($fp, 'directory access testing.') !== false) 
{ 
$mark ^= 2; //目录可写可读011,目录可写不可读 010 
} 
@fclose($fp); 
@unlink($test_file); 
/* 检查目录是否可修改 */ 
$fp = @fopen($test_file, 'ab+'); 
if ($fp === false) 
{ 
return $mark; 
} 
if (@fwrite($fp, "modify test.rn") !== false) 
{ 
$mark ^= 4; 
} 
@fclose($fp); 
/* 检查目录下是否有执行rename()函数的权限 */ 
if (@rename($test_file, $test_file) !== false) 
{ 
$mark ^= 8; 
} 
@unlink($test_file); 
} 
/* 如果是文件 */ 
elseif (is_file($file_path)) 
{ 
/* 以读方式打开 */ 
$fp = @fopen($file_path, 'rb'); 
if ($fp) 
{ 
$mark ^= 1; //可读 001 
} 
@fclose($fp); 
/* 试着修改文件 */ 
$fp = @fopen($file_path, 'ab+'); 
if ($fp && @fwrite($fp, '') !== false) 
{ 
$mark ^= 6; //可修改可写可读 111,不可修改可写可读011... 
} 
@fclose($fp); 
/* 检查目录下是否有执行rename()函数的权限 */ 
if (@rename($test_file, $test_file) !== false) 
{ 
$mark ^= 8; 
} 
} 
} 
else 
{ 
if (@is_readable($file_path)) 
{ 
$mark ^= 1; 
} 
if (@is_writable($file_path)) 
{ 
$mark ^= 14; 
} 
} 
return $mark; 
}

PHP判断目录是否存在
/**************************************************** 
* 将xml数据流,写入到xml文件 
* @param $xmlData 
* @return bool|string 
*/ 
function writeXmlFile($xmlData) 
{ 
$time = time(); //获取时间戳,用于给文件命名 
$path = dirname(__FILE__); //获取当前绝对路径 
$path = substr_replace($path, "", stripos($path, "actions\data")); //将此文件所在的固有路径替换成空 
$path .= "xmlFiles\"; //存放目录名 
/*判断目标目录是否存在,不存在则新建*/ 
if(!is_dir($path)) 
{ 
mkdir($path); //新建目录 
} 
/*记录完整路径和文件名*/ 
$filePathAndName = $path.$time.".xml"; 
/*打开文件,文件名为<时间戳> + <.xml>*/ 
$fp = fopen($filePathAndName, "w"); 
if(!$fp) 
{ 
return false; 
} 
/*写入文件流*/ 
$flag = fwrite($fp, $xmlData); 
if(!$flag) 
{ 
return false; 
} 
fclose($fp); 
return $filePathAndName; 
}
PHP 相关文章推荐
PHP4实际应用经验篇(2)
Oct 09 PHP
让你的PHP同时支持GIF、png、JPEG
Oct 09 PHP
php设计模式之观察者模式的应用详解
May 21 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
May 10 PHP
PHP中的gzcompress、gzdeflate、gzencode函数详解
Jul 29 PHP
php出现web系统多域名登录失败的解决方法
Sep 30 PHP
浅谈php优化需要注意的地方
Nov 27 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
Dec 28 PHP
PHP获取redis里不存在的6位随机数应用示例【设置24小时过时】
Jun 07 PHP
php基于数组函数实现关联表的编辑操作示例
Jul 04 PHP
PHP实现上传图片到数据库并显示输出的方法
May 31 PHP
PHP实现新型冠状病毒疫情实时图的实例
Feb 04 PHP
php模拟js函数unescape的函数代码
Oct 20 #PHP
PHP 万年历实现代码
Oct 18 #PHP
php页面缓存ob系列函数介绍
Oct 18 #PHP
php cc攻击代码与防范方法
Oct 18 #PHP
php shell超强免杀、减少体积工具实现代码
Oct 16 #PHP
PHP中替换换行符的几种方法小结
Oct 15 #PHP
php变量范围介绍
Oct 15 #PHP
You might like
PHP Directory 函数的详解
2013/03/07 PHP
php加密算法之实现可逆加密算法和解密分享
2014/01/21 PHP
PHP引用(&amp;)各种使用方法实例详解
2014/03/20 PHP
[原创]php简单防盗链验证实现方法
2016/07/09 PHP
疯掉了,尽然有js写的操作系统
2007/04/23 Javascript
jquerydom对象的事件隐藏显示和对象数组示例
2013/12/10 Javascript
引入JS文件IE6报语法错误或缺少对象问题的解决方法
2014/01/09 Javascript
JS实现点击按钮获取页面高度的方法
2015/11/02 Javascript
常用Javascript函数与原型功能收藏(必看篇)
2016/10/09 Javascript
概述jQuery的元素筛选
2016/11/23 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
10道典型的JavaScript面试题
2017/03/22 Javascript
jQuery简介_动力节点Java学院整理
2017/07/04 jQuery
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
VueJs使用Amaze ui调整列表和内容页面
2017/11/30 Javascript
seajs下require书写约定实例分析
2018/05/16 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
2019/04/10 Javascript
vue绑定数字类型 value为数字的实例
2020/08/31 Javascript
vue中jsonp插件的使用方法示例
2020/09/10 Javascript
Python读取环境变量的方法和自定义类分享
2014/11/22 Python
python计算牛顿迭代多项式实例分析
2015/05/07 Python
在Python web中实现验证码图片代码分享
2017/11/09 Python
Flask之flask-session的具体使用
2018/07/26 Python
详解opencv Python特征检测及K-最近邻匹配
2019/01/21 Python
Python中捕获键盘的方式详解
2019/03/28 Python
浅析python内置模块collections
2019/11/15 Python
基于PyTorch的permute和reshape/view的区别介绍
2020/06/18 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
综合测评自我鉴定
2013/10/08 职场文书
成教毕业生自我鉴定
2013/10/23 职场文书
工程质量承诺书
2014/03/27 职场文书
2015年农村党员公开承诺事项
2015/04/28 职场文书
学习委员竞选稿
2015/11/20 职场文书
如何用JS实现网页瀑布流布局
2021/04/24 Javascript
Mysql如何实现不存在则插入,存在则更新
2022/03/25 MySQL
SQL Server Agent 服务无法启动
2022/04/20 SQL Server