安装完 Laravel 后,需要配置一些目录的读写权限:storage 和 bootstrap/cache 目录应该是可写的,storage包括里面的子目录页需要可写,所以需要使用-R设置权限。
# chmod 777 /home/user 注:仅把/home/user目录的权限设置为rwxrwxrwx,不影响user目录下的其余文件的权限
# chmod -R 777 /home/user 注:表示将整个/home/user目录与其中的文件和子目录的权限都设置为rwxrwxrwx
chmod -R 777 storage/
chmod -R 777 bootstrap/cache
这个在本地不用设置也可以。这个是在终端执行命令:
php artisan config:cache ,将所有配置文件的配置缓存到单个文件里,这将会将所有配置选项合并到单个文件从而可以被框架快速加载。
应用一旦上线,就要运行一次 php artisan config:cache,但是在本地开发时,没必要经常运行该命令,因为配置值经常需要改变。
是往bootstrap/cache文件写入config.php,我本地一个用户,运行项目和执行终端都是这个用户,默认对当前用户有7的权限。但是如果项目放到服务器上,且在a用户里,如果用b用户登录服务器,那么就得设置权限b可写入的权限了。
网上设置权限的写法:
我推荐将目录的权限设置为会写文件的用户名和用户组。
chmod -R 777 app/storage
#访问一下网页,看看是否有输出。
#进入到/app/storage/session的文件组是谁?我的是nobody
#这个是php的用户组,我的nginx也是这个组
chmod -R 775 app/storage
chown -R :nobody app/storage
本地Apache测试的时候:
chmod -R 777 storage/
#访问一下网页,有输出首页
#进入到storage/framework/sessions 的所有者是zhaochun,文件组是staff
# sessions里生成的文件的所有者是_www,文件组是staff,按理说只要_www用户拥有sessions文件夹的写入权限就可以写入东西,_www用户属于staff组,这个文件夹对staff的权限是7,staff组内的成员_www应该可以写入文件。
chmod -R 775 storage
chown -R :staff storage 修改文件的所有者为staff,我这里就是staff,所以可以不设置
#两个所有者同属staff组,我应该设置所有者和所属组的权限为7就可以了,其它使用者的权限为5不可写。
#但是项目首页依旧不能访问,当设置为777的时候就可以访问。不清楚是什么原因,待解决
#当设置chmod -R 757 storage,的时候,首页也可以访问,sessions文件夹可以写入内容,说明对写入sessions文件的_www用户,当成其他使用者了。
部署laravel项目里写到的laravel文件权限:
https://github.com/wi1dcard/laravel-deployment/blob/master/src/10.%20%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2%20-%20%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E7%9A%84%E5%BF%85%E8%A6%81%E4%BC%98%E5%8C%96.md
文件权限直接关系到服务器安全与否。通常情况下,我们应当遵循「最小权限原则」,即权限越小越好。对于 Laravel 来说,我个人比较倾向的权限配置为:
$ cd /var/www/deployment
$ chmod -R 750 .
$ chmod -R 770 storage bootstrap/cache
你可以通过在线工具 Chmod Calculator 来计算八进制权限数字:
上图是 750 所代表的权限,即文件所有者可 读、写、执行(进入),文件所有组可 读、执行(进入),其余用户 均不可。
注意:对于文件来说,Execute 权限表示可执行;对于目录来说,表示可进入(即 cd)。为方便描述,以下统称为「执行」权限。
也就是说,运行 Nginx 和 PHP-FPM 的 www-data 用户,可读、写、执行;www-data 用户组内的用户可读、执行。
而 770 则更加宽松 —— 对于 Laravel 运行时需要写入的目录,赋予文件所有组可 读、写、执行 权限;也就是说 www-data 用户组内的用户可写 storage、bootstrap/cache 目录。
本地开发服务器
如果你在本地安装了 PHP,你可能希望像运行 PHP 内置的开发服务器一样来访问自己的应用程序,你可以使用 serve Artisan 命令来启动一个本地开发服务器,这样你就可以在 http://localhost:8000 来访问它。
php artisan serve (关闭终端自动关闭本地服务器了,就不可以访问了)
这样就可以不用设置storage的权限,直接通过localhsot:8000就可以直接访问项目。因为这样在sessions里生成的文件的所有者就是zhaochun,