Skip to content

系统异常: file_put_contents(xxx/xxx.js) Failed to open stream: Permission denied 问题处理方法 ​

该问题为站点目录文件权限不足导致,常见于保存手机端设置、在线升级等需要写入站点文件的操作。本文介绍该异常的排查与处理方法。 ​

一、问题现象 ​

在后台保存设置(如手机端设置中的部署方式、手机端域名)时,页面顶部提示系统异常:

系统异常: file_put_contents(wap/assets/index-35fa259e.js): Failed to open stream: Permission denied

报错中的路径为站点内需要写入的文件,提示 Permission denied 表示当前程序运行用户对该文件或所在目录没有写入权限。

二、原因说明 ​

原因说明
目录所有者不正确站点目录的所有者不是 PHP 运行用户(一般为 www),程序无法写入文件
目录权限不足站点目录权限过低,或部分子目录权限与其他目录不一致
子目录未继承权限仅修改了站点根目录权限,未同步应用到子目录,导致深层目录仍然不可写

三、处理步骤 ​

1. 进入站点根目录

登录宝塔面板,打开左侧「文件」菜单,进入对应站点的网站根目录。

2. 全选所有文件夹

勾选根目录下的全部文件夹,使权限设置覆盖整站目录。

3. 点击顶部「权限」按钮

在文件列表上方工具栏中点击「权限」,打开批量设置权限弹窗。

4. 设置权限为 755、所有者为 www

在「设置权限【批量】」弹窗中:

设置项取值
权限755
所有者www
应用到子目录勾选

设置完成后点击「确定」。

5. 确认设置成功

等待弹窗提示设置成功,列表中的「权限/所有者」列变为 755/www,表示整站目录权限已统一。

6. 重新执行原操作

回到后台重新保存原设置(如手机端设置),确认不再出现 Permission denied 报错。

四、注意事项 ​

  • 权限设置需勾选「应用到子目录」,否则子目录内的文件仍可能无法写入。
  • 站点目录的所有者应为 www;若所有者显示为 root,需一并修改为 www。
  • 该处理方法适用于宝塔面板环境;其他面板或命令行环境可使用对应的权限设置方式,效果相同。