PHP输出目录文件夹,文件和回显权限以及可写或不可写

时间:2014-08-06 19:35:50

标签: php

我希望PHP检查我在变量中输入的选择目录,并同时输出文件夹,文件,权限(可写或不可写)。

这是我的PHP代码:

<?php
$directorySelection = '../app/';
if (file_exists($directorySelection)) {
  if ($existence = opendir('../app')) {
    while (false !== ($files = readdir($existence))) {
      if ($files  != "." && $files  != ".." && $files  != ".DS_Store") {
        echo '<table>';
        echo '<tr>';
        echo '<td style="width: 90%; padding: 10px;">'. $files .'</td>';
        if (is_writable($files)) {
          echo '<td><span class="label label-success">Writable</span></td>';
        } else {
          echo '<td><span class="label label-danger">Not writable</span></td>';
        }
        echo '<td>'. substr(sprintf('%o', fileperms($files)), -4) . '</td>';
        echo '</tr>';
        echo '</table>';
      }
    }
    closedir($existence);
  }
} else {
  echo '<div class="alert alert-warning" role="alert">Application Directory doesn\'t exist <a role ="button"  data-toggle="alertInfo" placement="left" title="Application Directory" data-content="Please set your Application Directory, so that the installer can check for folder, files and there Permissions "> <span class="glyphicon glyphicon-info-sign floatRight"></span></a></div>';
}
?>

我得到的结果:
enter image description here

1 个答案:

答案 0 :(得分:2)

问题在于您的$files变量,因为它不包含完整路径,只包含名称,而是从CWD检查。

您的代码正在根据CWD测试文件权限,但您的文件不在CWD中。所以在$files前面加上目录的名称,例如

 if ($files  != "." && $files  != ".." && $files  != ".DS_Store") {
   $filepath = $directorySelection . $files;
   .... 
   if (is_writable($filepath)) {
   .....

  substr(sprintf('%o', fileperms($filepath)), -4) 

它应该正确读取文件。如果需要名称,请使用$files;对于采用文件名的函数,请使用$filepath。 (内部代码未显示为不混乱)