📜  laravel 无法创建根目录 - PHP (1)

📅  最后修改于: 2023-12-03 15:32:35.238000             🧑  作者: Mango

Laravel 无法创建根目录 - PHP

当使用Laravel时,你可能会遇到无法创建根目录的问题。这是由于laravel尝试将执行权转移到storage和bootstrap目录,但由于权限不足,它无法创建目录。

解决方案
1. 通过chmod更改目录权限

可以通过执行以下命令更改目录权限:

chmod -R 777 storage
chmod -R 777 bootstrap/cache

但这种方法不够安全,建议在生产环境中使用更加安全的方法。

2. 使用setfacl命令更改权限

setfacl命令使我们能够设置访问控制列表(ACL),并为文件和目录授权。 该命令允许您为每个目录设置不同的权限。

例如,对于'demo'用户,可以允许读取和写入的访问权限:

setfacl -dR -m u:demo:rwX storage
setfacl -dR -m u:demo:rwX bootstrap/cache
  • -dR选项允许我们递归地应用权限,包括目录和文件。

  • -m选项允许我们修改ACL,同时仍然允许其他权限和ACL保持不变。

  • u选项允许我们指定用户或组,demo是用户,可以换成你自己的用户名。

  • rwX选项允许r和w权限,以及对于目录,它还可以设置x权限。

3. 更改Web服务器用户组

Apache服务器默认使用www-data用户组,而NGINX服务器默认使用nginx用户组。请确保该用户组具有访问storage和bootstrap目录的权限。

您可以通过使用此命令检查当前服务器用户:

ps aux | grep php-fpm

输出类似于下面的内容:

root   10760  0.0  1.9 686540 20036 ?       Ss   11:48   0:00 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
www-data 10771  0.0  1.5 686040 15932 ?        S    11:48   0:00 php-fpm: pool www
www-data 10772  0.0  1.5 686040 15932 ?        S    11:48   0:00 php-fpm: pool www

这说明Apache服务器使用www-data用户组。因此,如果您的服务器使用Apache,则可以将www-data用户组添加到storage和bootstrap目录中:

chgrp -R www-data storage bootstrap/cache
chmod -R ug+rwx storage bootstrap/cache

请注意,仅使用此方法仍然存在安全风险。建议使用更加复杂的权限管理来保护文件和目录。

结论

在Laravel中,无法创建根目录错误是很普遍的问题。在生产中使用Laravel时,需要更加安全地管理目录权限。您可以使用chmod命令,但在生产环境中可能会出现安全问题。另外,您可以使用setfacl命令或更改web服务器用户组。请确保了解所有安全风险,并使用最佳实践来保护您的应用程序和数据。