如何为低于777的文件夹设置权限?
mkdir(getcwd() . '/public/profile/usr'.$user->getId(), 0777, true);
mkdir(getcwd() . '/public/profile/usr'.$user->getId() . '/patients', 0777, true);
mkdir(getcwd() . '/public/profile/usr'.$user->getId() . '/picture', 0777, true);这些文件夹的权限类型如下:
drwxr-xr-x我希望它设置为:
drwxrwxrwx你能告诉我如何解决这个问题吗?
发布于 2016-05-17 16:02:46
首先,没有充分的理由将文件夹或文件权限设置为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引起的,在这种情况下,chmod777无论如何都不会对你有太大的帮助。通常,上载文件夹需要httpd_public_content_rw_t上下文。
发布于 2016-05-17 15:53:55
查看这篇文章: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);
?>发布于 2016-05-17 16:02:55
以下是许多可能的方法之一:
<?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...
}
}https://stackoverflow.com/questions/37270166
复制相似问题