线上服务器出现file_put_contents视图文件写入失败错误求助
解决Laravel部署后视图缓存文件无法写入的问题
这个问题我之前部署Laravel项目时也踩过坑,本地跑的好好的,一上线就报视图缓存文件找不到,你已经试过php artisan config:cache但没用,咱们从几个核心方向排查:
优先检查目录权限与存在性
线上服务器的storage/framework/views目录很可能没有正确的读写权限,或者干脆不存在。- 先确认目录存在,不存在就手动创建(如果是Linux服务器):
mkdir -p storage/framework/views - 给
storage和bootstrap/cache目录设置正确的权限,让web服务器用户(比如www-data、nginx)能读写:
注意:不同服务器的web用户可能不同,比如CentOS上可能是chmod -R 775 storage bootstrap/cache chown -R www-data:www-data storage bootstrap/cacheapache,要对应调整。
- 先确认目录存在,不存在就手动创建(如果是Linux服务器):
手动清除视图缓存
你之前只清了配置缓存,但视图缓存可能已经损坏或者路径不对。直接清理视图缓存:php artisan view:clear如果线上无法运行Artisan命令,就直接登录服务器,删除
storage/framework/views下的所有文件(包括报错里提到的那个缓存文件)。检查路径配置是否兼容服务器系统
报错里的路径是C:\appname\storage\framework\views/...,这明显是Windows的路径格式!如果你的线上服务器是Linux系统,这个路径肯定有问题。检查:.env文件里的相关路径配置是否正确,有没有硬编码Windows格式的路径;- 确认Laravel的根目录路径在服务器上是正确的,没有配置错误。
彻底重置所有缓存
有时候单独清理某一类缓存不够,试试全套清理命令:php artisan cache:clear php artisan config:clear php artisan route:clear php artisan view:clear php artisan optimize:clear如果需要启用缓存,再重新生成:
php artisan config:cache php artisan route:cache排查SELinux限制(仅Linux服务器)
如果是CentOS、RHEL这类开启了SELinux的系统,即使目录权限正确,SELinux也可能阻止web服务器写入文件。可以临时关闭SELinux测试(不建议长期关闭):setenforce 0如果问题解决了,就给目录设置正确的SELinux上下文,永久解决:
chcon -R -t httpd_sys_rw_content_t storage bootstrap/cache
内容的提问来源于stack exchange,提问作者Mohammad hayajneh
相关产品推荐
相关产品推荐

