【问题标题】:PHP create nested directoriesPHP创建嵌套目录
【发布时间】:2011-09-28 15:01:21
【问题描述】:

我需要一个函数来为以下情况创建一个 2 级目录:

  1. 所需的子目录存在于父目录中,什么都不做。
  2. 父目录存在,子目录不存在。仅创建子目录。
  3. 父目录和子目录都不存在,先创建父目录,再创建子目录。
  4. 如果任何目录没有成功创建,返回 FALSE。

感谢您的帮助。

【问题讨论】:

    标签: php directory mkdir


    【解决方案1】:

    使用mkdir()的第三个参数:

    recursive 允许创建在路径名中指定的嵌套目录。默认为 FALSE。

    $path = '/path/to/folder/with/subdirectory';
    mkdir($path, 0777, true);
    

    【讨论】:

    • @Paulocoghi 你是对的。这种行为与 Linux 的 mv 不同,后者只是忽略现有路径
    • 使用 if(!is_dir($path)) { mkdir($path, 0777, true); }
    【解决方案2】:

    recursive 允许创建在路径名中指定的嵌套目录。 但对我不起作用!! 因为这就是我想出的!而且效果非常好!!

    $upPath = "../uploads/RS/2014/BOI/002";   // full path 
    $tags = explode('/' ,$upPath);            // explode the full path
    $mkDir = "";
    
        foreach($tags as $folder) {          
            $mkDir = $mkDir . $folder ."/";   // make one directory join one other for the nest directory to make
            echo '"'.$mkDir.'"<br/>';         // this will show the directory created each time
            if(!is_dir($mkDir)) {             // check if directory exist or not
              mkdir($mkDir, 0777);            // if not exist then make the directory
            }
        }
    

    【讨论】:

      【解决方案3】:

      您可以尝试使用file_exists 来检查文件夹是否存在,并使用is_dir 来检查它是否是文件夹。

       if(file_exists($dir) && is_dir($dir))
      

      要创建目录,您可以使用mkdir 函数

      那么你剩下的问题就是操纵它来满足要求

      【讨论】:

        【解决方案4】:

        参见mkdir,尤其是$recursive 参数。

        【讨论】:

          【解决方案5】:

          我受了多少苦……得到了这个剧本……

          function recursive_mkdir($dest, $permissions=0755, $create=true){
              if(!is_dir(dirname($dest))){ recursive_mkdir(dirname($dest), $permissions, $create); }  
              elseif(!is_dir($dest)){ mkdir($dest, $permissions, $create); }
              else{return true;}
          }
          

          【讨论】:

          • 这只是没有格式化,还是你认真写这样的代码?
          • @buffalo,如果认真阅读了有关答案的信息(我的评论 got this script 甚至发布日期),这就足够了。此外,你可以只编辑帖子,而不是讽刺,你有足够的代表;)干杯。
          【解决方案6】:

          从 PHP 8 (2020-11-24) 开始,可以使用命名参数:

          <?php
          mkdir('March/April', recursive: true);
          

          https://php.net/function.mkdir

          【讨论】:

            【解决方案7】:

            您正在寻找的功能是 MKDIR。 使用最后一个参数递归地创建目录。还有read the documentation.

            【讨论】:

              【解决方案8】:

              从 PHP 5.0+ 开始,mkdir 有一个递归参数,它会创建任何缺失的父级。

              【讨论】:

                【解决方案9】:
                // Desired folder structure
                $structure = './depth1/depth2/depth3/';
                
                // To create the nested structure, the $recursive parameter 
                // to mkdir() must be specified.
                
                if (!mkdir($structure, 0744, true)) {
                    die('Failed to create folders...');
                }
                
                Returns TRUE on success or FALSE on failure.
                

                PHP: mkdir - Manual

                【讨论】:

                  猜你喜欢
                  • 2021-10-10
                  • 2012-06-13
                  • 2012-02-29
                  • 2016-03-31
                  • 1970-01-01
                  • 2015-05-13
                  相关资源
                  最近更新 更多