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

终端执行PHP调用Node.js脚本正常,浏览器触发无效果求助

问题分析与解决思路

终端运行PHP文件时Node脚本能正常执行,但浏览器访问时无反应,核心原因是web服务器运行PHP的用户(如www-data)与终端用户的权限、环境变量不一致,以下是具体排查和解决步骤:

1. 强制使用Node的绝对路径

终端里的node命令路径可能不在web服务器的环境变量中,必须在PHP代码里用绝对路径调用Node:

  • 先在终端执行 which node,得到类似/usr/bin/node的绝对路径
  • 修改PHP中的$nodeScript,替换node为绝对路径:
$nodeScript = "nohup /usr/bin/node /var/www/html/puppeteer-new/node.mjs 3DXLens > /tmp/output.log 2>&1 < /dev/null &";

2. 检查权限配置

(1)脚本与依赖文件权限

确保web用户(www-data)能读取Node脚本及依赖包:

sudo chown -R www-data:www-data /var/www/html/puppeteer-new
sudo chmod -R 755 /var/www/html/puppeteer-new

(2)输出目录权限

确认/tmp目录允许web用户读写(临时测试可放宽权限,生产环境需按需调整):

sudo chmod 777 /tmp

3. 临时关闭后台执行,暴露报错信息

先去掉nohup和后台执行符&,同步执行脚本并输出所有日志,方便排查具体错误:

$nodeScript = "/usr/bin/node /var/www/html/puppeteer-new/node.mjs 3DXLens 2>&1";
$output = shell_exec($nodeScript);
echo "<pre>$output</pre>";

浏览器访问后,就能直接看到Node脚本的执行日志或报错(比如依赖缺失、路径不存在等)。

4. 验证Web用户的执行能力

切换到www-data用户,手动执行Node脚本,确认是否能正常运行:

sudo -u www-data /usr/bin/node /var/www/html/puppeteer-new/node.mjs 3DXLens

如果报错提示缺少Chrome依赖库(比如libnss3、libatk1.0-0等),以Debian/Ubuntu为例,安装对应依赖:

sudo apt-get install -y libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 libasound2

5. 调整日志输出路径(可选)

如果/tmp目录写入权限受限,可将日志文件放到web用户有权限的目录,比如:

$nodeScript = "nohup /usr/bin/node /var/www/html/puppeteer-new/node.mjs 3DXLens > /var/log/webscreenshot.log 2>&1 < /dev/null &";

同时配置日志文件权限:

sudo touch /var/log/webscreenshot.log
sudo chown www-data:www-data /var/log/webscreenshot.log

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 15:16:27