2

以下工作在 Windows 中:

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

我说的是PHP mkdir

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

以前我通过分解路径并一个一个地创建每个文件夹来解决这个问题。但我不想这样做,因为它应该在“resurive”标志设置为 true 的情况下工作。为什么它不起作用?

4

3 回答 3

3

对不起,但是除了mkdir命令本身之外肯定有一些问题。

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

#!/usr/bin/php
<?php
mkdir ('testdir/testdir2/testdir3',0777,TRUE);
?>
于 2012-11-30T09:53:07.080 回答
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");
}
于 2012-11-30T09:49:17.087 回答
1

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

例如,在 的情况下../my/folder/somewhere/on/the/server,如果../my已经存在并且 PHP 能够写入..但不能写入mymkdir则会失败。

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

于 2016-04-01T07:34:10.870 回答