【问题标题】:mkdir() not workingmkdir() 不工作
【发布时间】:2025-12-11 23:35:01
【问题描述】:

我的代码

mkdir("/some/absolute/path",0777);

mkdir("relative/path", 0777);

不工作,安全模式已关闭,我什至尝试将所有父文件夹设置为 777。

有什么想法吗?

编辑:我确实打开了错误报告,我很沮丧,我已经 777'd 整个路径只是为了确保这不是问题。这一定是一件非常简单的事情。

编辑编辑:为所有回复建议的人点赞……但我不会选择答案,因为这仍未解决,但我认为这将是那些未解决的问题之一永远。

EDIT x 3:所以我对这个问题的解决方案最不令人满意......我从一个干净的 VM 映像开始,重试它,它现在可以工作了。不开玩笑。

【问题讨论】:

  • 几件事:运行此代码的进程是否有权写入父目录?如果您通过 Web 服务器运行此程序,您是否检查了日志中的错误消息?
  • 所以,你必须打开错误报告
  • @Col。弹片:啊,是的,确实如此,我曾假设是这样,但我们知道在做出假设时会发生什么。感谢您指出这一点!
  • 我在这里几乎没有什么想法,除了建议您尽可能使用命令行 PHP 运行(并且您还没有),看看是否会吐出错误消息。如果您的现有脚本在没有 Web 服务器的情况下无法运行,只需创建一个简短的脚本,例如:
  • 除了error_reporting,“display_errors”是否也设置为1?这是我总是喜欢忘记的事情,如果这没有帮助并且没有显示错误,我也没有想法。

标签: php mkdir


【解决方案1】:

所有的父目录都存在吗?

如果没有,您需要启用递归(假设这里是 PHP5):

mkdir('/path/to/your/dir',0777,true);

编辑:没有看到隐藏的评论说从var 向下的每个目录都设置为全局可写,所以我打赌目录路径存在并且上述内容没有帮助。对不起!

【讨论】:

  • 一切都好,我害怕发生这种情况,所以我只是对原始问题进行了编辑。
  • 很高兴看到一个七年前的答案仍然可以帮助人们!
【解决方案2】:

您是否尝试像在命令行上使用mkdir -p 那样递归地创建这些目录?如果是这样,请将true 指定为mkdir 的第三个参数。

为了回应之前的建议,请指定您收到的错误消息。如果您没有收到任何信息,请在致电前使用:error_reporting(-1); // ALL messagesini_set('display_errors', 'On');

【讨论】:

  • 这几乎就是我在脚本开头的代码。除了我有这个而不是-1。它应该是-1吗?我有 ini_set('display_errors',1); error_reporting(E_ALL|E_STRICT) 我应该改用 -1 吗? 1 过去一直在显示错误。
  • 它是一个位掩码,因此 -1 本质上与 unsigned int 的“所有位设置”相同。效果将是相同的。如果在将来的某个版本中,他们添加了另一个E_ALL 中未包含的E_XXX 常量,-1 无论如何都会包含它。基本上取决于你喜欢什么。
【解决方案3】:

如果有人遇到这个问题..我可以给你一个答案,我花了 2 个小时来寻找..我尝试使用完整路径和“../mydirectoryname”。

尝试使用:

mkdir("./mydirectoryname", 0777, true);

而不是..

mkdir("../mydirectoryname", 0777, true);

【讨论】:

    【解决方案4】:

    您是否尝试过尽可能短的测试?

    mkdir('目录',0777);

    如果这不起作用,我会尝试使用像 0755 这样的标准 CHMOD 创建(这是一个完全随机的猜测,也许服务器不允许通过 PHP 创建 0777)

    如果这不起作用,我会说服务器可能需要不同的设置/php 在文件夹上没有写入权限,也许您可​​以询问您的主机提供商?

    【讨论】:

      【解决方案5】:

      我有类似的问题,我发现我的驱动器上没有剩余可用空间。使用命令df(在 linux 上)检查您的驱动器有多满。在这种情况下可能允许root创建文件和文件夹,因为他有预先保留的空间。如果您从命令行以root 用户身份运行脚本 - 没有错误,但如果您的脚本由apache 运行,则会发生错误。

      【讨论】:

        【解决方案6】:

        对于将来的参考,问题可能来自您尝试创建新目录的目录没有足够的权限。

        例如,您的索引目录可能如下所示: index.php new_dirs_here

        如果new_dirs_here 没有足够的权限,那么你不能在里面创建目录。

        要解决这个问题,我会使用以下命令: chmod 777 new_dirs_here

        我现在不担心安全问题,只是想解决眼前的问题。您当然可以查找更好的权限设置,但想法是您的new_dirs_here 应该有足够的权限。

        那么,您的mkdir() 函数应该可以正常工作了。

        祝你好运

        【讨论】:

        • 你是一个绝对的天使,我需要这个。由于某种原因,其他答案都不起作用,即使使用 chmod 0755 并在 mkdir 中指定模式
        【解决方案7】:

        确保父目录具有正确的写入权限,这是我的问题

        【讨论】:

          【解决方案8】:

          路径名参数周围缺少引号。

          【讨论】:

          • 代码实际上有那个......对不起,我很沮丧,我忘了添加它,我会进行编辑。还有其他想法吗?
          • 确保您已打开错误报告,以便在调用该函数时查看它是否给出任何警告。
          【解决方案9】:

          您必须将属性放在引号中:

          mkdir('path/to/your/dir','0777');
          

          【讨论】:

          • 不,$mode 参数被定义为八进制整数,因此您不应在其周围加上引号。