Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 递归创建文件和文件夹_Php - Fatal编程技术网

Php 递归创建文件和文件夹

Php 递归创建文件和文件夹,php,Php,我得到了一个包含路径名和文件名的数组 ['css/demo/main.css', 'home.css', 'admin/main.css','account'] 如果这些文件和文件夹还不存在,我想创建它们。如果它们已经存在,请覆盖它们。 <?php function mkpath($path) { if(@mkdir($path) or file_exists($path)) return true; return (mkpath(dirname($path))

我得到了一个包含路径名和文件名的数组

['css/demo/main.css', 'home.css', 'admin/main.css','account']
如果这些文件和文件夹还不存在,我想创建它们。如果它们已经存在,请覆盖它们。


<?php
  function mkpath($path)
  {
    if(@mkdir($path) or file_exists($path)) return true;
    return (mkpath(dirname($path)) and mkdir($path));
  }
?>

这会递归生成路径。

对于每个路径,您必须指定它是文件还是目录。或者,您可以让脚本假定,当basename(路径的最后一部分)包含一个点时,路径指向一个文件

递归创建目录很简单:

mkdir(dirname($path), 0755, true); // $path is a file
mkdir($path, 0755, true);          // $path is a directory

0755
是文件权限表达式,您可以在此处阅读:

我刚刚使用了一种简单的方法分解字符串,重新生成并检查是文件还是目录

public function mkdirRecursive($path) {


    $str = explode(DIRECTORY_SEPARATOR, $path);
    $dir = '';
    foreach ($str as $part) {
        $dir .= DIRECTORY_SEPARATOR. $part ;
        if (!is_dir($dir) && strlen($dir) > 0 && strpos($dir, ".") == false) {
            mkdir($dir , 655);
        }elseif(!file_exists($dir) && strpos($dir, ".") !== false){
           touch($dir);
        }
    }
}

mkdir()。不需要特殊函数。但是带有递归参数的
mkdir
将仅在创建的目录中的最后一个目录上设置权限。