Home  >  Article  >  Backend Development  >  Determine whether an empty file directory has read and write permissions in PHP_PHP Tutorial

Determine whether an empty file directory has read and write permissions in PHP_PHP Tutorial

WBOY
WBOYOriginal
2016-07-13 17:00:02767browse

is_writable is used to handle this, remember that PHP may only be able to access the file as the username running the webserver (usually 'nobody'). Does not count towards Safe Mode limits.

Example #1 is_writable() Example

The code is as follows
 代码如下 复制代码

$filename = 'test.txt';
if (is_writable($filename)) {
echo 'The file is writable';
} else {
echo 'The file is not writable';
}
?> 

Copy code

$filename = 'test.txt';
if (is_writable($filename)) {
echo 'The file is writable';
} else {
echo 'The file is not writable';
}
?>

One problem with the above function is that filename is required. It is stipulated that the file to be checked must be a file, and the directory cannot be judged. Next, we will judge the empty directory.
 代码如下 复制代码

/*
  问题出现:如何检查一个目录是否可写,如何目录下还有目录和文件,那么都要检查
   
  思路:
   (1)首先先写出检查空目录是否可写的算法:
         在该目录中生成一个文件,如果不能生成,表明该目录没有写的权限
   
   (2)使用递归的办法来进行检查
  
  代码实现:
 */
  set_time_limit(1000);
  function check_dir_iswritable($dir_path){
  $dir_path=str_replace('','/',$dir_path);
  $is_writale=1;
  if(!is_dir($dir_path)){
    $is_writale=0;
    return $is_writale;
  }else{
   $file_hd=@fopen($dir_path.'/test.txt','w');
   if(!$file_hd){
    @fclose($file_hd);
    @unlink($dir_path.'/test.txt');
    $is_writale=0;
    return $is_writale;
   }
   $dir_hd=opendir($dir_path);
   while(false!==($file=readdir($dir_hd))){
    if ($file != "." && $file != "..") {
     if(is_file($dir_path.'/'.$file)){
      //文件不可写,直接返回
      if(!is_writable($dir_path.'/'.$file)){
       return 0;
      } 
     }else{
      $file_hd2=@fopen($dir_path.'/'.$file.'/test.txt','w');
      if(!$file_hd2){
       @fclose($file_hd2);
       @unlink($dir_path.'/'.$file.'/test.txt');
       $is_writale=0;
       return $is_writale;
      }
      //递归
      $is_writale=check_dir_iswritable($dir_path.'/'.$file);
     }
    }
   }
  }
  return $is_writale;
  }

Example 1
This function is very commonly used, especially in some projects that need to generate static files. Whether a directory can be used depends on whether the directory has permission to create files and delete files
The code is as follows Copy code
/*
The question arises: How to check whether a directory is writable? If there are directories and files in the directory, then check them all

Idea:
(1) First, write down the algorithm for checking whether an empty directory is writable:
Generate a file in the directory. If it cannot be generated, it means that the directory does not have write permission

(2) Use recursive method to check

Code implementation:
*/
set_time_limit(1000);
function check_dir_iswritable($dir_path){
$dir_path=str_replace('','/',$dir_path);
$is_writale=1;
if(!is_dir($dir_path)){
$is_writale=0;
Return $is_writale;
}else{
$file_hd=@fopen($dir_path.'/test.txt','w');
if(!$file_hd){
@fclose($file_hd);
@unlink($dir_path.'/test.txt');
$is_writale=0;
Return $is_writale;
}
$dir_hd=opendir($dir_path);
while(false!==($file=readdir($dir_hd))){
if ($file != "." && $file != "..") {
If(is_file($dir_path.'/'.$file)){
//The file cannot be written, return directly
If(!is_writable($dir_path.'/'.$file)){
        return 0;
                                                                                 }else{
$file_hd2=@fopen($dir_path.'/'.$file.'/test.txt','w');
If(!$file_hd2){
          @fclose($file_hd2);
          @unlink($dir_path.'/'.$file.'/test.txt');
          $is_writale=0;
         return $is_writale;
        }
//Recursion
        $is_writale=check_dir_iswritable($dir_path.'/'.$file);
}
}
}
}
return $is_writale;
} The above example mainly uses fopen to create files in the directory or write content in the file, so that the read and write permissions of the directory can be determined.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/631280.htmlTechArticleis_writable is used for processing, remember that PHP may only be able to run the webserver as the username (usually 'nobody') to access the file. Does not count towards Safe Mode limits. Example #1 is_writable...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn