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 相关文章推荐
生成静态页面的php函数,php爱好者站推荐
Mar 19 PHP
PHP实现定时生成HTML网站首页实例代码
Nov 20 PHP
php将fileterms函数返回的结果变成可读的形式
Apr 21 PHP
PHP中PDO基础教程 入门级
Sep 04 PHP
让你的PHP7更快之Hugepage用法分析
May 31 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
Aug 07 PHP
php实现的中秋博饼游戏之掷骰子并输出结果功能详解
Nov 06 PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
Apr 02 PHP
PHP中quotemeta()函数的用法讲解
Apr 04 PHP
小程序微信退款功能实现方法详解【基于thinkPHP】
May 05 PHP
Swoole4.4协程抢占式调度器详解
May 23 PHP
php反射学习之不用new方法实例化类操作示例
Jun 14 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的五种设计模式
2012/09/05 PHP
$_GET['goods_id']+0 的使用详解
2013/06/06 PHP
php session_start()出错原因分析及解决方法
2013/10/28 PHP
yii通过小物件生成view的方法
2016/10/08 PHP
分析php://output和php://stdout的区别
2018/05/06 PHP
关于文本框的一些限制控制总结~~
2010/04/15 Javascript
Javascript基础 函数“重载” 详细介绍
2013/10/25 Javascript
jQuery中bind与live的用法及区别小结
2014/01/27 Javascript
js写出遮罩层登陆框和对联广告并自动跟随滚动条滚动
2014/04/29 Javascript
IE 下Enter提交表单存在重复提交问题的解决方法
2014/05/04 Javascript
JavaScript 常见安全漏洞和自动化检测技术
2015/08/21 Javascript
浅谈addEventListener和attachEvent的区别
2016/07/14 Javascript
细数JavaScript 一个等号,两个等号,三个等号的区别
2016/10/09 Javascript
浅析vue数据绑定
2017/01/17 Javascript
JavaScript实现简单图片轮播效果
2017/08/21 Javascript
vue使用axios跨域请求数据问题详解
2017/10/18 Javascript
react-router4 配合webpack require.ensure 实现异步加载的示例
2018/01/18 Javascript
Vue2.0中三种常用传值方式(父传子、子传父、非父子组件传值)
2018/08/16 Javascript
[40:01]OG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
2019/07/04 Python
一篇文章搞定Python操作文件与目录
2019/08/13 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
2020/02/26 Python
用Python实现职工信息管理系统
2020/12/30 Python
HTML5实现应用程序缓存(Application Cache)
2020/06/16 HTML / CSS
手工制作的音乐盒:Music Box Attic
2019/09/05 全球购物
.NET程序员的数据库面试题
2012/10/10 面试题
商务助理岗位职责
2013/11/13 职场文书
学生生病请假条范文
2014/02/16 职场文书
奶茶店创业计划书
2014/08/14 职场文书
房屋财产继承协议书范本
2014/11/03 职场文书
党的群众路线教育实践活动个人整改措施落实情况
2014/11/04 职场文书
2014年员工工作总结范文
2014/11/18 职场文书
年会邀请函范文
2015/01/30 职场文书
校运会新闻稿
2015/07/17 职场文书
《金色的草地》教学反思
2016/02/17 职场文书
MySQL笔记 —SQL运算符
2022/01/18 MySQL