Mkdir()设置权限777

时间:2016-05-17 07:48:56

标签: php permissions

如何为777以下的文件夹设置权限?

drwxr-xr-x

以下类型的文件夹权限:

drwxrwxrwx

我希望它设置为:

TrippleBall

请告诉我如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

首先,永远是一个很好的理由将文件夹或文件权限设置为777.感觉需要这样做的人通常是盲目跟随(糟糕的)在线教程或拥有他们无法修复的基础安全/权限问题。通常可以通过在文件夹(通常是www-data或apache用户)上设置正确的所有者/组来修复任何上传/写入问题,777意味着任何人可以写或执行那些文件夹中的任何内容。你基本上是把你的后门打开,在一个糟糕的街区解锁。另请参阅How will a server become vulnerable with chmod 777?了解更多详情。

话虽如此,我之前看到mkdir()这样的问题,通常是因为系统上设置了某个umask,迫使新创建的文件夹拥有755个权限。尽管如此,进行特定的chmod()通话仍然可以解决问题:

mkdir(getcwd() . '/public/profile/usr'.$user->getId(), 0777, true);
chmod(getcwd() . '/public/profile/usr'.$user->getId(), 777);
// And so on...

但是,更好的解决方案:修复您的权限/安全问题。只需设置正确的所有者(运行PHP的过程),这将避免必须设置777权限,但将允许正确的上载处理。这应该是默认值,但你可以强制它:

// This will get the user the PHP process is running under on Linux machines:
$user = `whoami`;

mkdir(getcwd() . '/public/profile/usr'.$user->getId(), 0755, true);
chown(getcwd() . '/public/profile/usr'.$user->getId(), $user);
// And so on

这将在文件夹上设置755权限并将所有权设置为PHP进程,这意味着PHP对该文件夹具有完全权限,但任何其他用户都没有。这样更安全,但同样方便。

问题也可能是由SELinux引起的,在这种情况下,chmod 777无论如何都不会对你有所帮助。通常上传文件夹需要httpd_public_content_rw_t上下文。

答案 1 :(得分:1)

查看此帖子:http://php.net/manual/de/function.mkdir.php

从那里回答......

使用递归参数时请记住,如果你在mkdir()之后使用chmod()设置模式而不用uchar()的值修改你需要在所有创建的目录上调用chmod() 。即:

<?php
mkdir('/test1/test2', 0777, true);
chmod('/test1/test2', 0777);
?> 

可能导致“/ test1 / test2”的模式为0777,但“/ test1”仍然具有mkdir()调用的模式0755。你需要这样做:

<?php
mkdir('/test1/test2', 0777, true);
chmod('/test1', 0777);
chmod('/test1/test2', 0777);
?>

答案 2 :(得分:0)

以下是其中一种可能的方法:

    <?php
        $baseDir    = getcwd() . '/public/profile/usr'. $user->getId();
        $arrFolders = array('/patients', '/picture');

        // FIRST chmod THE BASE DIRECTORY TO HAVE THE PERMISSIONS YOU WANT:
        chmod($baseDir, 0777);

        // LOOP THROUGH THE ARRAY OF FOLDERS YOU WANT TO CREATE & CREATE THEM WITH APPROPRIATE PERMISSIONS:         
        foreach($arrFolders as $folder){
            try{
                mkdir($baseDir . $folder, 0777, true);
            }catch(Exception $e){
                // HANDLE ANY EXCEPTION SHOULD ONE OCCUR...
            }
        }