PHP :为文件添加新权限



在我的服务器上,我有一些具有不同权限的文件。

在我的php脚本中,我想为每个文件向添加写入权限。

使用linux cmd,chmod g+w file可以完成这项工作。

但是如何使用php chmod()来做到这一点?

这是我到目前为止尝试过的:

$filePermission = fileperms('myFile.txt');
# g+w = 020
chmod('myFile.txt', $filePermission+20);

这给了我想要的东西,但是Linuxchmod g+w有没有php的替代方案?

语法g+w对PHP无效,大多数编程语言也无效,因为底层操作系统没有这些值的概念。chmod系统调用仅接受八进制值,不接受字符串。在您的系统上,chmod命令行可执行文件已实现解析器来实现此自定义功能。

虽然您的示例"有效",但如果文件已经具有 g+w,则会导致不良结果,因为再添加 20 个将打开额外的位并授予文件您不想要的额外权限。例如,如果文件权限020并且您向其添加了020,则该权限将变为040

Posix 文件权限是八进制位,其中每个数字代表读取、写入和执行的组合。因此,添加操作 (+) 不正确,您需要使用按位运算(如ANDOR)来打开或关闭单个位。对于PHP,C,C++和最常见的语言,AND运算符是与号(&),OR运算符是管道符号(|)。由于我们希望打开位,因此需要使用OR运算符。

处理此问题的正确方法是:

$filePermission = fileperms('myFile.txt');
chmod('myFile.txt', $filePermission | 020);

请注意,我在数字前面加上了0,这将使PHP将数字解释为八进制而不是十进制。

最近我制作了一个关于此的视频,试图帮助人们理解八进制符号的工作原理chmod,它可能会帮助您完成您正在尝试完成的任务。 https://www.youtube.com/watch?v=j8FLsxdl0ns

如果您希望像命令行二进制文件那样获得友好的 menomic 支持,则需要自己实现解析器,或者从 PHP 调用命令行二进制文件,例如:

exec('/bin/chmod ' . escapeshellarg($perms) . ' ' . escapeshellarg($file));

但请注意,这种用法比直接在 PHP 中使用内置的chmod函数要慢得多。它还可能使您面临潜在的安全问题。

最新更新