Laravel - 创建具有特定用户、组和权限的文件

Laravel - Create file with specific user, group and permissions

我尝试使用 put 创建一个文件并赋予该文件 777.

权限

如果我这样创建文件:

use File;

...

$content = "<?php echo 'test'; ?>";
$file   = app_path() . '/Http/Controllers/test.php';
File::put($file, $content);

但是,文件是使用以下权限创建的:

-rw-r--r-- 1 daemon daemon 2,2K Mär 14 08:08 test.php

此外,用户和组是 daemon 而不是 root

如何创建具有用户和组 root 以及权限 rwxrwxrwx 的文件?

例如

-rwxrwxrwx 1 root root 2,2K Mär 14 08:08 test.php

我也将这些行添加到我的 /etc/sudoers

www-data ALL=(ALL) NOPASSWD: /bin/chmod 
www-data ALL=(ALL) NOPASSWD: /bin/chown
www-data ALL=(ALL) NOPASSWD: /bin/chgrp

但我仍然得到 chmod(): no permission,代码如下:

File::chmod($unitPath, 0777);
chown($unitPath,"root");
chgrp($unitPath,"root");

Laravel 内置支持更改 mod

例如:

File::chmod($file,0755); //the leading zero is a must

不幸的是,它的文件系统 module 中没有 chown,但您可以调用 php 一个

chown($file,"root");

更改群组

chgrp($file,"group");

注意:如果您不是超级用户,更改组和所有者将失败,即使您可以 sudo。

我用shell_exec()

解决了
shell_exec('sudo chmod 0777 '. $unitPath);
shell_exec('sudo chown root:root '. $unitPath);

通过在文件 /etc/sudoers.

中输入这些行,确保允许 www-data 执行命令
www-data ALL=(ALL) NOPASSWD: /bin/chmod 
www-data ALL=(ALL) NOPASSWD: /bin/chown

重要!始终使用 visudo 来编辑 /etc/sudoers,否则您很容易出现语法错误并损坏文件并失去使用 sudo 的可能性,并且您需要通过从 live cd 启动来修复系统.