xvfb-run 在 shell 中工作,但在从 PHP exec() 命令运行时则不然



我正在尝试让 nightmarejs 在我的 centos 服务器上工作,并且能够通过运行 xvfb-run 来做到这一点,但我需要通过 php exec() 函数调用此命令。

当我这样做时,我只是得到一个空的结果,好像它不起作用?

当我通过命令行(即 xvfb-run node my-script.js)运行它时,一切正常。知道为什么它似乎不起作用或不适用于我的 php 脚本吗?

尽管 Cono 的答案确实有效,但它的安全性较低,因为它YOUR_USER可以访问 wheel,使YOUR_USER成为管理员。

相反,在/etc/sudoers.d (RHEL/CentOS) 中创建一个文件,内容如下:(假设YOUR_USER是 apache)

# Allow apache to run xvfb-run
Defaults:apache !requiretty
Defaults:apache visiblepw
apache ALL = NOPASSWD: /usr/bin/xvfb-run

这样,如果 apache 用户遭到入侵,他们只能运行 xvfb-run 命令。

(感谢第三节点的回答)

好的,

我想通了。基本上,必须为 xvfb-run 授予 sudo 访问权限,以便通过 php 中的可执行脚本调用它。为此,请登录终端并执行以下操作:

# sudo visudo

确保轮组未注释

%wheel  ALL=(ALL)       ALL

这意味着添加到滚轮组的用户将有权调用 sudo 命令

在文件底部,授予用户对脚本的访问权限

YOUR_USER ALL = NOPASSWD: /usr/bin/xvfb-run

保存文件并将用户添加到滚轮组

usermod -aG wheel YOUR_USER

最后,从你的PHP脚本中,你现在可以通过sudo调用XVFB-run

<?php exec('sudo xvfb-run node my-script.js'); ?>

最新更新