PHP 文件系统 chgrp() 函数



PHP 文件系统 chgrp() 函数可以用来更改文件组。该函数尝试将由 `filename` 指定的文件的组更改为指定的 `group`。只有超级用户可以随意将组更改为任何组,而其他用户只能将其更改为他们所属的组。

文件/目录中的组含义:在基于 Unix 的操作系统中,文件控制系统会规范谁有权访问文件/文件夹以及他们被允许对文件/文件夹执行哪些操作。每个文件/文件夹都有三种类型的用户:所有者(拥有它的人)、组(共享相同权限的人)和其他。

语法

以下是 PHP 文件系统 chgrp() 函数的语法:

bool chgrp ( string $filename, string/int $group )

参数

以下是 chgrp() 函数的必需参数和可选参数:

序号 参数及说明
1

filename (必需)

它定义了您想要更改其用户组的文件。

2

group (必需)

它标识新的用户组。它可以是组名或数字。

返回值

此函数在成功时返回 TRUE,失败时返回 FALSE。

PHP 版本

chgrp() 函数最初作为 PHP 4 核心的一部分引入,并且与 PHP 5、PHP 7、PHP 8 兼容良好。

示例

在下面的 PHP 代码中,使用 PHP 文件系统 chgrp() 函数获取文件“sample.txt”的组 ID。之后,它打印更新的组 ID 和时间戳,并将文件的组更改为“admin”。

<?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));
?>

输出

这将产生以下结果:

/PhpProject/sample.txt's Group ID @ Fri, 23 May 2024 02:42:21 +0200: 0
/PhpProject/sample.txt's Group ID @ Fri, 23 May 2024 02:42:21 +0200: 0

示例

下面的 PHP 代码在使用 chgrp() 函数将组设置为“admin”后,迭代数组中的每个文件,并打印每个文件的更新的组 ID 和时间戳。

在这里,我们还使用了 clearstatcache() 函数来清除文件信息的缓存。

<?php
   // Specify the filenames here
   $files = ["/PhpProject/sample1.txt", "/PhpProject/sample2.txt"];

   // define format of the file
   $format = "File: %s, Group ID @ %s: %d\n";
   
   foreach ($files as $filename) {
       printf($format, $filename, date('r'), filegroup($filename));
       chgrp($filename, "admin");
       clearstatcache();
       printf($format, $filename, date('r'), filegroup($filename));
   }

?> 

输出

这将生成以下结果:

Permissions for /PhpProject/sample.txt @ Tue, 23 May 2024 02:53:00 +0000: 100644
Permissions for /PhpProject/sample.txt @ Tue, 23 May 2024 02:53:01 +0000: 100644

示例

我们还可以使用 chgrp() 函数同时更改多个文件的组所有权。为此,我们必须将两个路径定义为文件名数组。

<?php
   // specify the file path here
   $files = ["/Applications/XAMPP/xamppfiles/htdocs/mac/myfile.txt", "/Applications/XAMPP/xamppfiles/htdocs/mac/newfile.txt"];
   
   $format = "File: %s, Group ID @ %s: %d\n";
   
   foreach ($files as $filename) {
       printf($format, $filename, date('r'), filegroup($filename));
       echo "<br>";  // Print a new line for better readability
       chgrp($filename, "admin");
       clearstatcache();
       printf($format, $filename, date('r'), filegroup($filename));
       echo "<br>";  // Print a new line for better readability
   }
   
?> 

输出

这将导致以下结果:

File: /Applications/XAMPP/xamppfiles/htdocs/mac/myfile.txt, Group ID @ Thu, 23 May 2024 14:44:34 +0200: 80
File: /Applications/XAMPP/xamppfiles/htdocs/mac/myfile.txt, Group ID @ Thu, 23 May 2024 14:44:34 +0200: 80
File: /Applications/XAMPP/xamppfiles/htdocs/mac/newfile.txt, Group ID @ Thu, 23 May 2024 14:44:34 +0200: 80
File: /Applications/XAMPP/xamppfiles/htdocs/mac/newfile.txt, Group ID @ Thu, 23 May 2024 14:44:34 +0200: 80

示例

现在,我们将根据给定的条件使用 chgrp() 函数更改组所有权。因此,代码只检查和更正如果现有组所有权不是由“admin”拥有的文件。

该代码还使用了 posix_getgrnam() 函数来检索信息,filename() 函数来获取文件名,filegroup() 函数来获取文件的组。

<?php
   // specify the file path here
   $filename = "/Applications/XAMPP/xamppfiles/htdocs/mac/myfile.txt";

   $groupToSet = "admin";
   $format = "File: %s, Group ID @ %s: %d\n";

   printf($format, $filename, date('r'), filegroup($filename));
   echo "<br>";

   if (filegroup($filename) != posix_getgrnam($groupToSet)['gid']) {
      chgrp($filename, $groupToSet);
      clearstatcache();
   }

   printf($format, $filename, date('r'), filegroup($filename));
?> 

输出

这将产生以下结果:

File: /Applications/XAMPP/xamppfiles/htdocs/mac/myfile.txt, Group ID @ Thu, 23 May 2024 14:51:48 +0200: 80
File: /Applications/XAMPP/xamppfiles/htdocs/mac/myfile.txt, Group ID @ Thu, 23 May 2024 14:51:48 +0200: 80

注意

  • 您必须具有更改文件组的必要权限。
  • 在某些系统上,您可能需要成为超级用户 (root) 才能更改文件的组。

总结

chgrp() 是 PHP 中的一个文件系统函数,允许您更改文件的组。它允许您通过分配合适的归属来管理文件和目录。

php_function_reference.htm
广告