我有一个名为的目录cache
,/var/www
我需要以以下方式提供权限:
sudo chmod -R 777 cache
但这还不够,因为 PHP 脚本会自动在其下创建子目录,以便更好地管理文件,例如a
、、b
...c
等等。现在,每当创建任何新目录时,它都不会从父目录“缓存”继承权限,而是保留drwxr-xr-x
访问权限,而不是drwxrwxrwx
。
有人可以帮忙吗?
答案1
这是 UNIX 功能的预期行为umask
,用于控制新创建文件的权限。
例如,使用umask
,0022
组和世界写入位将被屏蔽。这可能解释了您在脚本创建的目录中看到的结果。
您可能能够将umask
PHP 中的 调整为0000
,但由于这是一个进程全局设置,并且 PHP 解释器嵌入在 Apache 中,因此它可能会对脚本以外的安全产生影响。另一种方法是chmod()
在创建目录后发出调用,这应该更安全一些,并且不依赖于设置umask
。
您可能还需要考虑是否真的需要将这些目录设置为全球可写。如果文件需要由 Web 服务器和其他脚本写入,也许您可以将目录设置为由这两个环境的共同组拥有,并仅使其可由组写入。