【问题标题】:PHP Mkdir not executing recursively?PHP Mkdir没有递归执行?
【发布时间】:2012-11-30 09:42:11
【问题描述】:

以下工作在 windows 中:

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

我说的是PHP mkdir

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

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

【问题讨论】:

  • 阅读手册页很有用 - linux.die.net/man/1/mkdir
  • 为我工作(在 linux 上的 php 内)。
  • 使用绝对路径会发生什么?
  • 在这种情况下,绝对路径不是我的选择。
  • 您是否开启了错误报告?

标签: php mkdir


【解决方案1】:

抱歉,除了mkdir 命令本身之外,肯定有一些问题。

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

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

【讨论】:

    【解决方案2】:

    这是发现的东西

    • 确保根路径存在
    • 确保根路径可写
    • 不要使用..总是使用真实路径...

    例子

    $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");
    }
    

    【讨论】:

    • 请添加error_reporting(E_ALL); ini_set("display_errors","On");var_dump 我想看看输出......
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-04
      • 2011-05-31
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      相关资源
      最近更新 更多