【问题标题】:mkdir() to apply chmod 0777 for all subdirectories createdmkdir() 为创建的所有子目录应用 chmod 0777
【发布时间】:2014-09-29 08:38:48
【问题描述】:

当我调用 mkdir('/tmp/d/e/e/p/p/a/t/h/', 0777, true); 时,我需要到目前为止创建的所有子目录都具有指定的 chmod:0777。

什么是最短的方法? 我注意到它没有发生。

root@server [/tmp]# ls -la /tmp/d/e/e/p/p/a/t/h/
total 8
drwxr-xr-x 2 user group 4096 Aug  6 12:59 ./
drwxr-xr-x 3 user group 4096 Aug  6 12:59 ../

代码:

<?php
mkdir('/tmp/d/e/e/p/p/a/t/h', 0777, true);
?>

请看一下。

【问题讨论】:

  • 你能解释一下你的问题吗,你问的是 mkdir('/tmp/d/e/e/p/p/a/t/h', 0777, true);不工作??
  • 请解释您的问题,您是否想要“temp,d,e,e,p,p,t,h" 目录设置 0777 权限或者您想使用一个 mkdir() 函数创建这些目录
  • 至少最终目录 h/ 没有 0777 权限。

标签: php file-permissions mkdir


【解决方案1】:

就像杰克在 php.net (http://php.net/manual/en/function.mkdir.php#96990) 上所说的诡计

您必须为/tmp/d/e/e/p/p/a/t/h 的每个目录运行chmod

您可以使用 foreach 循环来实现。像这样的东西应该可以工作:

$path = "/tmp/d/e/e/p/p/a/t/h";
$dirs = explode("/", $path);
$cDirs = "";
foreach($dirs as $cDir) {
    $cDirs .= "/".$cDir;
    chmod($cDir, 0777);
}

提示:如果您在 linux 下,您可以简单地运行:

$path = "/tmp/d/e/e/p/p/a/t/h";
exec("mkdir -R ".$path);
exec("chmod -R 777 ".$path);

【讨论】:

    【解决方案2】:

    我会在一行中完成:

    exec('install -d -m 0777 /tmp/d/e/e/p/p/a/t/h');
    

    这一步用指定的掩码递归地创建所有目录。

    【讨论】:

    • 我还需要执行 chmod -R 777 /tmp/d/ 来得到我的答案;需要为此脚本创建的所有子目录设置 0777。
    • umask=umask;掩码 0000; mkdir -p /tmp/d/e/e/p/p/a/t/h; umask $unsk;
    • mkdir -p /tmp/d/e/e/p/p/a/t/h &amp;&amp; chmod 777 /tmp/d/e/e/p/p/a/t/h -R
    • 目标是为所有创建的子目录设置 chmod 777,d/, e/, e/, p/, p/, a/ t/, h/。
    • @BimalPoudel 使用 -R 选项在每个子目录上设置递归 chmod。 cd /tmp/ &amp;&amp; mkdir -p d/e/e/p/p/a/t/h &amp;&amp; chmod 777 d/e/e/p/p/a/t/h -R
    猜你喜欢
    • 2011-05-22
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 2013-07-18
    • 2014-02-05
    相关资源
    最近更新 更多