Laravel - 使用特定用户,组和权限创建文件

时间:2017-03-14 15:21:04

标签: php linux laravel laravel-5.4

我尝试使用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的文件?

e.g。

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

2 个答案:

答案 0 :(得分:3)

Laravel内置支持更改mod

例如:

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

不幸的是它没有在其Filesystem模块中显示,但你可以调用php一个

chown($file,"root");

更改群组

chgrp($file,"group");

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

答案 1 :(得分:1)

我使用shell_exec()

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

通过在文件www-data中输入这些行,确保允许/etc/sudoers执行命令。

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

重要提示!始终使用visudo来编辑/etc/sudoers,否则您可以轻松地制作语法错误并破坏文件并放弃使用sudo的可能性,并且您需要通过从live cd启动来修复系统