Php 简明教程
PHP – File Permissions
权限的概念是 Unix/Linux 文件系统核心的内容。权限决定了谁可以访问文件,以及如何访问文件。Linux 中的文件权限受 chmod command 控制,该命令可以在 Linux 终端里面运行。PHP 提供了 chmod() function ,您可以使用它以编程方式处理文件权限。
仅当您在 Linux 操作系统上工作时,PHP 的 chmod() 函数才是有效的。它在 Windows 上不起作用,因为 Windows操作系统的文件权限控制机制不同。
要查看启用的文件权限,请使用 “ ls -l ” 命令获取文件列表(长列表)
mvl@GNVBGL3:~$ ls -l
-rwxr-xr-x 1 mvl mvl 16376 May 5 21:52 a.out
-rw-r--r-- 1 mvl mvl 83 May 5 21:52 hello.cpp
-rwxr-xr-x 1 mvl mvl 43 Oct 11 14:50 hello.php
-rwxr-xr-x 1 mvl mvl 43 May 8 10:01 hello.py
drwxr-xr-x 5 mvl mvl 4096 Apr 20 21:52 myenv
第一列包含每个文件的权限标志。第三列和第四列指出每个文件的所有者和组,然后是大小、日期和时间以及文件名。
权限字符串有十个字符,它们的含义解释如下 −
Position |
Meaning |
1 |
“d”,如果是目录,“-”如果是普通文件 |
2, 3, 4 |
文件所有者的读、写、执行权限 |
5, 6, 7 |
组的读、写、执行权限 |
8, 9, 10 |
其他(所有人)的读、写、执行权限 |
权限字符串中的字符有以下含义:
Value |
Meaning |
- |
Flag is not set. |
r |
File is readable. |
w |
文件可写。对于目录,可以创建或删除文件。 |
x |
文件可执行。对于目录,可以列出文件。 |
如果你考虑上述列表中的第一个条目:
-rwxr-xr-x 1 mvl mvl 16376 May 5 21:52 a.out
“a.out”文件由用户“mvl”和组“mvl”所有。它是一个普通文件,所有者有“读/写/执行”权限,并且组和其他人有“读/执行”权限。
权限标志的二进制和八进制表示可以用下表理解:
Octal Digit |
Binary Representation (rwx) |
Permission |
0 |
000 |
none |
1 |
001 |
execute only |
2 |
010 |
write only |
3 |
011 |
write and execute |
4 |
100 |
read only |
5 |
101 |
read and execute |
6 |
110 |
read and write |
7 |
111 |
读、写和执行(完全权限) |
The chmod() Function
chmod() 函数可以更改指定文件的权限。成功时返回 true ,否则在失败时返回 false 。
chmod(string $filename, int $permissions): bool
chmod() 函数尝试将指定文件( $filename )的模式更改为权限中给定的模式。
第二个参数 $permissions 是一个四位八进制数字的八进制数。第一位始终为零,第二位指定所有者的权限,第三位指定所有者的用户组权限,第四位指定其他人权限。每位数字都是每种类型的权限值的和。
1 |
Execute Permission |
2 |
Write Permission |
4 |
Read Permission |
$permissions 参数的默认值是 0777 ,这意味着目录在启用执行、写和读权限时创建。
Example
请看以下示例:
<?php
// Read and write for owner, nothing for everybody else
chmod("/PhpProject/sample.txt", 0600);
// Read and write for owner, read for everybody else
chmod("/PhpProject/sample.txt", 0644);
// Everything for owner, read and execute for everybody else
chmod("/PhpProject/sample.txt", 0755);
// Everything for owner, read for owner's group
chmod("/PhpProject/sample.txt", 0740);
?>
The chown() Function
chown() 函数尝试将文件 filename 的所有者更改为新用户。请注意,只有超级用户可以更改文件的拥有者。
chown(string $filename, string|int $user): bool
The chgrp() Function
chgrp() 函数尝试将文件 filename 的组更改为组。
chgrp(string $filename, string|int $group): bool
只有 superuser 可以随意更改文件的组;其他用户可以将文件的组更改为该用户所属的任何组。
Example
请看以下示例:
<?php
$filename = "/PhpProject/sample.txt";
$format = "%s's Group ID @ %s: %d\n";
printf($format, $filename, date('r'), filegroup($filename));
chgrp($filename, "admin");
clearstatcache(); // do not cache filegroup() results
printf($format, $filename, date('r'), filegroup($filename));
?>
它将生成以下 output −
/PhpProject/sample.txt's Group ID @ Fri, 13 Oct 2023 07:42:21 +0200: 0
/PhpProject/sample.txt's Group ID @ Fri, 13 Oct 2023 07:42:21 +0200: 0