8.5 检测文件属性函数

有些同学特别好奇,检测文件属性用在什么地方。检测文件属性能用到的地方太多了。

我们来举例子:

  1. 我们在做软件安装的时候,大家会发现如果文件存在了,就跳转到了其他的地方。
  2. 如果在安装的过程当中,某些文件没有写入权限,就不让进行安装。

我们来举一个国内非常出名的软件,discuz的安装过程截图给大家看看:
document/2015-09-07/55eda1ec1ab58

上面的例子,就是典型的文件检测的用法。

我们来学习一下下面的一批函数。然后,我们来通过一个例子进行学习。

bool file_exists ( $指定文件名或者文件路径)
功能:文件是否存在。

bool is_readable ( $指定文件名或者文件路径)
功能:文件是否可读

bool is_writeable ( $指定文件名或者文件路径)
功能:文件是否可写

bool is_executable ( $指定文件名或者文件路径)
功能:文件是否可执行

bool is_file ( $指定文件名或者文件路径)
功能:是否是文件

bool is_dir ( $指定文件名或者文件路径)
功能:是否是目录

void clearstatcache ( void )
功能:清楚文件的状态缓存

上面的功能一看就清楚了。那实验,我们就来写这个最开始我们举的这个例子。

我们来讲第一个例子,文件锁。如果已经安装了,存在安装锁就提示已安装,否则就继续安装。

我们假设安装界面的网址是:install.php,安装的锁文件是install.lock。我们就可以检测install.lock文件是否存在。

<?php

if(file_exists("install.lock")){
    
    echo "已安装,请不要再次进行安装";
    exit;

}
?>

我们接下来做一个文件安装检测的实验来检测文件或目录是否有写入或者读取权限。如果没有则不能进行安装。

处理这件事情的思路如下:

  1. 定义一批需要检测权限的数组
  2. 可以检测是文件夹还是文件
  3. 做一个标置位变量,如果标置位变量一旦为false则不显示下一步的安装
<?php

//可以定义一批文件是否存在
$files = [
    "config.php",
    "img/",
    "uploads/",
];

//定义标志位变量
$flag = true;
foreach($files as  $v){
    echo $v;
    
    //判断是文件还是文件夹
    
    if(is_file($v)){
        echo "是一个文件&nbsp;&nbsp;&nbsp;&nbsp;";
    }else if(is_dir($v)){
        echo "是一个文件夹&nbsp;&nbsp;&nbsp;&nbsp;";
    }
    
    if(is_readable($v)){
        echo " 可读";
    }else{
         echo "<font color="red">不可读</font>";
    }
    
    if(is_writeable($v)){
        echo "可写";
    }else{
        echo "<font color="red">不可写</font>";
    }
    
    echo "<br />";
}

if($flag){
    echo "<a href="step1">下一步</a>";

}else{
     echo "不能进行安装";
}
?>

通过上面的例子,我们就做到了。实现PHP某个软件安装过程当中的安装检测。

也就是我们上面思路的实现。

文章导航