PHP中的递归chmod函数

文件权限很重要,尤其是如果要让用户代理查看文件时,尤其如此。如果该文件没有正确的权限,则将无法访问该文件,并且可能导致脚本失败。为了解决这个问题,您可能需要使用以下功能。它使用PHP函数chmod()设置权限,但是无论您在何处设置权限,它都会以递归方式进行操作。

function chmod_R($path, $filemode) {
 if ( !is_dir($path) ) {
  return chmod($path, $filemode);
 }
 $dh = opendir($path);
 while ( $file = readdir($dh) ) {
  if ( $file != '.' && $file != '..' ) {
   $fullpath = $path.'/'.$file;
   if( !is_dir($fullpath) ) {
    if ( !chmod($fullpath, $filemode) ){
     return false;
    }
   } else {
    if ( !chmod_R($fullpath, $filemode) ) {
     return false;
    }
   }
  }
 }
 
 closedir($dh);
 
 if ( chmod($path, $filemode) ) {
  return true;
 } else {
  return false;
 }
}

这对于某些创建或复制文件的脚本特别有用,因为可能会在没有正确权限的情况下创建这些文件。您可以通过为首选项提供一个目录和一个八进制值来调用此函数。请注意,八进制值很重要。如果要授予文件775的权限,则必须使用0775。以下是此函数的实际操作示例,已为该脚本提供了要从中运行脚本的当前目录。

chmod_R(dirname(__FILE__),0775);

此目录下的所有内容(包括脚本文件)都将设置为0775,这对于大多数用途来说是标准的。