ecshop 文件或目录权限检查函数
时间:2011-09-22
来源:互联网
- 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.\r\n") !== 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;
- }
这个方法的为什么要用 $mark ^= 1;这个形式来赋值,而不是具体的= 某个值,看上去也比较直观。
还有可写,和可修改,两个概念有啥区别,难道会有可修改,然后不可写这样子的情况?
还有这行
/* 试着修改文件 */
$fp = @fopen($file_path, 'ab+');
if ($fp && @fwrite($fp, '') !== false)
{
$mark ^= 6; //可修改可写可读 111,不可修改可写可读011...
}
//可修改可写可读 111,不可修改可写可读011... 怎么会有这种情况呢》?
如果这里为ture $mark 那么值是111,如果为false ,$mark 不是就上面的($mark ^= 1; //目录可读 001,目录不可读 000),怎么会有011这种情况呢
可能写的有点乱
作者: 深蓝色 发布时间: 2011-09-22
没人回啊
作者: 二点水 发布时间: 2011-09-22
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28