【问题标题】:Node Module command from PHP exec() not working, but working in terminal来自 PHP exec() 的节点模块命令不起作用,但在终端中工作
【发布时间】:2023-02-11 13:16:41
【问题描述】:

您好我想运行一个节点 js 脚本。 如果我在终端node app.js 中运行,它将起作用。 但是如果我使用

$output = shell_exec('node -v 2>&1');
echo "<pre>$output</pre>";

或者

$output = shell_exec('node app.js 2>&1');
echo "<pre>$output</pre>";

我收到 node: not found 错误 如果我跑

$output = shell_exec('ls');
echo "<pre>$output</pre>";

它显示了我拥有 app.js 的那个文件夹中的当前文件

【问题讨论】:

  • 推测节点不在用户执行PHP脚本的路径中
  • 也许您只为您的用户安装了节点,而 PHP 正在与另一个用户一起运行?

标签: php node.js


【解决方案1】:

正如一些 cmet 所说,节点可执行文件可能不在您的路径中。例如,如果您使用 nvm 之类的东西来安装节点,它可能不在 PATH 中。尝试在终端中运行whereis node 以找出节点的安装位置,并使用带绝对路径的 shell_exec。

例如,如果我运行 whereis node 并且输出是

node: /home/user/.nvm/versions/node/v19.2.0/bin/node

我可以像这样使用 shell_exec:

$output = shell_exec('/home/user/.nvm/versions/node/v19.2.0/bin/node -v 2>&1');

请记住,如果您的主目录的权限限制 Web 服务器访问其内容,这将不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 2012-08-07
    • 2018-01-08
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多