PhantomJS不能通过浏览器在PHP中工作(但可以通过命令行工作,甚至可以通过命令行运行PHP)


PhantomJS doesn't work in PHP through browser (but does via command line, and even by running PHP through command line)

我试图让PhantomJS通过PHP运行。

当我直接通过命令行运行 JavaScript 文件时,它工作正常。当我在命令行中运行php render_html.php时,它只运行一个exec(),它工作正常。但是,当我尝试在浏览器中打开此php文件时,它什么也不做。我什至没有得到任何回声。

我已经在OS X和EC2服务器上本地完成了所有这些测试,并得到了相同的结果。

这可能是权限问题,请检查运行 Web 服务器的用户是否有权运行 phantomjs 可执行文件。

(代表OP发布)。

这似乎确实是一个权限问题。似乎Apache的待遇可能与其他用户略有不同?尽管标准权限允许任何用户访问PhantomJS应用程序,但apache仍然无法访问。

任何有类似问题的人都应该通读这个问题和答案。

这是我针对我的具体情况(在 Linux 服务器上)稍微调整的解决方案。编辑您的 sudoers 文件 (/etc/sudoers) 以包含以下行:

apache ALL=NOPASSWD: /usr/bin/phantomjs

我用emacs(C-x C-q来编辑只读文件)做了这件事。我似乎对此没有任何问题,但我想建议使用称为 visudo 的东西来编辑 sudo。Emacs 为我工作,但你应该查一下。

这给了 apache 用户对 PhantomJS 应用程序的显式访问权限,方法是授予它 sudo 访问权限,仅限于 PhantomJS 应用程序。

我最近在 centos 7 环境中使用 phantomjs,遇到了与 op 相同的问题。我尝试了在堆栈溢出中找到的解决方案和方法,所以我不太确定哪种方法有效或哪些方法协同工作来解决问题。我试过了

  1. 授予 777 对 PhantomJS 二进制和目标 JS 的权限并包含目录(不起作用)
  2. visudo 并允许 Apache 在没有密码的情况下使用 PhantomJS(不起作用)
  3. 将 Apache 添加到 sys 组(不起作用)
  4. 禁用的塞利努克斯在禁用Selinux并重新启动Cent OS后,PhantomJS开始在浏览器中工作。:D :D