You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从PHP调用Puppeteer遇EACCES权限错误,求解决方案

Puppeteer 权限错误(EACCES: permission denied)解决方案

问题根源

你遇到的EACCES: permission denied, stat '/root/.config/puppeteer'错误,核心原因是PHP的exec函数默认以www-data用户运行,而/root目录权限通常为700,仅允许root用户访问——哪怕你修改了/root/.config/puppeteer的权限和所有者,www-data连进入/root目录的权限都没有,所以修改子文件夹完全无效。

有效解决方案

方案1:在Node脚本前置设置环境变量

确保在引入puppeteer之前就指定所有相关环境变量,让Puppeteer直接使用www-data有权限的目录:

// 必须放在require('puppeteer')之前
process.env.PUPPETEER_CONFIG = '/var/www/.puppeteer/config';
process.env.PUPPETEER_CACHE_DIR = '/var/www/.puppeteer/cache';
process.env.PUPPETEER_USER_DATA_DIR = '/var/www/.puppeteer/user-data';

const puppeteer = require('puppeteer');
// 后续你的Puppeteer代码

然后创建对应目录并设置权限:

mkdir -p /var/www/.puppeteer/{config,cache,user-data}
chown -R www-data:www-data /var/www/.puppeteer
chmod -R 755 /var/www/.puppeteer

方案2:在PHP exec命令中直接传递环境变量

如果不想修改Node脚本,可在执行命令时直接注入环境变量,强制Puppeteer使用指定路径:

exec('PUPPETEER_CONFIG=/var/www/.puppeteer/config PUPPETEER_CACHE_DIR=/var/www/.puppeteer/cache PUPPETEER_USER_DATA_DIR=/var/www/.puppeteer/user-data node your-puppeteer-script.js', $output, $return_var);

同样需要先创建目录并设置权限(同方案1的bash命令)。

方案3:修改www-data的HOME环境变量

让Puppeteer默认使用www-data的家目录而非root的,只需在exec中设置HOME变量:

exec('HOME=/var/www node your-puppeteer-script.js', $output, $return_var);

然后创建默认配置目录:

mkdir -p /var/www/.config/puppeteer
chown -R www-data:www-data /var/www/.config
chmod -R 755 /var/www/.config

这样Puppeteer会自动读取/var/www/.config/puppeteer,无需额外设置其他环境变量。

内容的提问来源于stack exchange,提问作者Mo El

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 05:00:02