PHP和Xvfb的使用

06odsfpq  于 2023-04-19  发布在  PHP
关注(0)|答案(3)|浏览(261)

我试图在一个无头服务器上执行火狐来获取一个网站的屏幕截图。
“DISPLAY=:12 firefox -saveimage http://www.google.com/“.
问题是当我尝试做系统(“DISPLAY=:12 firefox -saveimage http://www.google.com”);不起作用。我有一种感觉,它不是在正常的shell环境中执行的。我违背了我更好的判断,给了apache用户一个实际的shell。如果我su到apache并执行命令,一切都很好,并按预期工作,但再次从系统调用它不起作用。任何见解都是非常受欢迎的。

kjthegm6

kjthegm61#

我找到解决办法了。
我只需要创建一个shell脚本来调用它,在玩了一段时间后,我在脚本的顶部添加了export HOME="/var/www/",它就可以工作了。
我希望这对其他人有帮助。

00jrzges

00jrzges2#

最有可能的是,httpd的环境没有满足您作为shell用户设置的环境变量的一些依赖性。在对环境进行任何英勇的操作之前,我建议从您的作业中捕获stderr(例如,通过将**2>/tmp/imgcaperrlog**添加到它的末尾),看看它是否有任何抱怨。

z31licg0

z31licg03#

经过几个小时的研究,我得到了它的工作,我有同样的问题与Xvfb和xfreerdp。似乎apache 2 mod_php不设置一个家庭用户www-data,所以从URL调用php脚本,使xfreerdp崩溃,导致它需要写入到~/.config/freerdp目录。通过另一端,调用它从php CLI工作,因为 shell 已经有一个家庭设置在环境中。
不使用外部shell脚本,我得到它的工作原理:

<?php
exec("nohup Xvfb :12 -screen 0 1280x1024x24 -nolisten unix &");
exec("DISPLAY=:12.0 HOME=/home/www-data/ nohup xfreerdp /bpp:24 /size:1280x1024 /u:admin /p:\"XXXXXX\" /v:10.0.0.10 /cert-ignore &");

我添加-nolisten unix是为了避免用户www-data创建/tmp/.X11-unix/文件夹。该目录应该归root所有。(在我的例子中,我不需要Xvfb侦听套接字)
@威廉非常感谢你的输入,你保存了我。

相关问题