PHP Mkdir没有递归执行?

时间:2012-11-30 09:42:12

标签: php mkdir

以下适用于Windows:

mkdir('../my/folder/somewhere/on/the/server', 0777, true);

我在谈论PHP mkdir

它完美地工作,并递归地创建子文件夹。但是,如果我在Linux服务器上运行相同的命令,则不会创建文件夹。

之前我通过分解路径并逐个创建每个文件夹来解决这个问题。但我不想这样做,因为它应该与“resurive”标志设置为true。为什么不起作用?

3 个答案:

答案 0 :(得分:3)

很抱歉,除mkdir命令本身外,一定有问题。

这个小例子按预期工作,并在Linux上执行时递归创建目录:

#!/usr/bin/php
<?php
mkdir ('testdir/testdir2/testdir3',0777,TRUE);
?>

答案 1 :(得分:1)

这是发现的事情

  • 确保根路径存在
  • 确保根路径可写
  • 请勿使用..始终使用真实路径......

示例

$fixedRoot = __DIR__;
$recusivePath = 'my/folder/somewhere/on/the/server';

if (is_writable($fixedRoot) && is_dir($fixedRoot)) {
    mkdir($fixedRoot . DIRECTORY_SEPARATOR . $recusivePath, 0, true);
} else {
    trigger_error("can write to that path");
}

答案 2 :(得分:1)

确保您的PHP用户(例如www-data)有权写入其尝试创建的任何文件夹的父文件夹。 PHP需要能够写入已经存在的最低版本。

例如,对于../my/folder/somewhere/on/the/server,如果../my已经存在且PHP能够写入..但不能写入mymkdir将失败。

如果您的用户是www-data,则可以使用sudo chown -R www-data:www-data ../mymy及其所有子文件夹授予写入权限。