【问题标题】:mkdir to create multiple subdirectories php/apachemkdir 创建多个子目录 php/apache
【发布时间】:2023-03-09 14:46:01
【问题描述】:
mkdir ("dir1/{dir1-1,dir1-2}",0755,TRUE);

此命令使用名为“{dir1-1,dir1-2}”的单个子文件夹创建文件夹 dir1,而不是创建 dir1-1 和 dir1-2 作为 dir1 的两个子文件夹。

知道如何通过上面的单个 mkdir 命令使其工作吗?

【问题讨论】:

  • 简单:你不能。是什么让你认为你可以?为什么不直接给mkdir() 打两次电话?
  • @DaveRandom 这就是让我觉得我可以做到的原因:developmentality.wordpress.com/2010/04/11/… 除了从那个例子中它对我不起作用,但它似乎是可能的。另外,假设您有 10 个子目录,在一个 mkdir 命令中执行它会更加高效和清洁
  • @MikePurcell 我相信那里的 TRUE 使它递归
  • @Maverick 这些是传递给 unix mkdir 命令的参数,而不是 PHP 函数。 PHP 函数使用操作系统调用,它不执行mkdir。如果您想实现这样的功能,恐怕您将不得不自己编写它...... PHP的mkdir()采用一个文字路径并尝试创建它,它不会解析您传递的字符串。
  • 那篇文章中是bash 在做扩展。您必须在 PHP 中模拟同样的事情,多次有效地调用 mkdir

标签: php linux apache mkdir


【解决方案1】:

shell mkdir 可以做到:

mkdir -p /foo/bar/peng

所以现在你可以从 php.ini 中调用外部 shell 命令。但要注意安全。

【讨论】:

    【解决方案2】:

    PHP 不像 shell 那样支持大括号扩展。如果你想创建多个目录,你将不得不多次调用mkdir(),你可以通过循环轻松地做到这一点。

    您可以将TRUE 作为第三个参数传递给mkdir() - 这意味着如果备份树的所有目录都不存在并且父目录可写,则它们也将被创建。在循环中操作时,您可以安全地将TRUE 传递给所有调用,给定目录的第一次迭代将创建它,后续调用不会产生不利影响。

    例如:

    $toCreate = array(
      'dir1/dir1-1',
      'dir1/dir1-2'
    );
    
    $permissions = 0755;
    
    foreach ($toCreate as $dir) {
      mkdir($dir, $permissions, TRUE);
    }
    

    【讨论】: