Laravel添加第二语言翻译时出现file_put_contents权限拒绝错误无法修复求助
报错根因
你的后台逻辑会动态生成翻译文件写入resources/lang目录,报错是因为Web服务运行账户(通常为www-data/nginx/apache)对该目录没有写入权限,之前终端修复失败大概率是权限赋值的用户/目录范围不正确。
方案1:可访问服务器终端的修复步骤
- 第一步先确认Web服务实际运行的用户:
输出值统一用# Nginx环境执行 ps aux | grep nginx | grep -v root | awk '{print $1}' | head -n1 # Apache环境执行 ps aux | grep apache | grep -v root | awk '{print $1}' | head -n1 # PHP-FPM环境执行 ps aux | grep php-fpm | grep -v root | awk '{print $1}' | head -n1WEB_USER指代,常见为www-data、nginx、apache这类账户。 - 第二步递归分配lang目录权限,把下方命令里的
WEB_USER替换为第一步拿到的实际值:chown -R WEB_USER:WEB_USER /var/www/app/resources/lang chmod -R 755 /var/www/app/resources/lang
方案2:无法访问终端的临时修复方案
如果没有终端操作权限,在项目根目录创建fix_perm.php文件,写入以下代码后通过浏览器访问一次该文件,执行完成后必须立即删除该文件避免安全风险:
<?php $langPath = __DIR__ . '/resources/lang'; function chmod_r($dir, $dirPerm, $filePerm) { $dp = opendir($dir); while($file = readdir($dp)) { if ($file == "." || $file == "..") continue; $fullPath = $dir."/".$file; if(is_dir($fullPath)) { chmod($fullPath, $dirPerm); chmod_r($fullPath, $dirPerm, $filePerm); } else { chmod($fullPath, $filePerm); } } closedir($dp); } chown($langPath, fileowner('index.php')); chgrp($langPath, filegroup('index.php')); chmod_r($langPath, 0755, 0644); echo "权限修复完成,请立即删除当前文件"; ?>
注意事项
- 共享主机环境可直接在面板的文件管理器中找到
resources/lang目录,勾选「权限递归到子项」后设置目录权限为755即可。 - 禁止将目录权限设置为777,会产生严重安全隐患。
内容的提问来源于stack exchange,提问作者Ham1399
相关产品推荐
相关产品推荐

