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

Example

请看以下示例:

<?php

   // File name and username to use
   $file_name= "index.php";
   $path = "/PhpProject/backup: " . $file_name ;
   $user_name = "root";

   // Set the user
   chown($path, $user_name);

   // Check the result
   $stat = stat($path);
   print_r(posix_getpwuid(fileowner($path)));
?>

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