首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用PHP、shell_exe和scrot捕获x屏幕

如何使用PHP、shell_exe和scrot捕获x屏幕
EN

Stack Overflow用户
提问于 2009-07-23 10:02:56
回答 3查看 2.6K关注 0票数 1

我正在为一个内部研发项目构建一个网页屏幕捕捉应用程序。

环境:Ubuntu9.04(默认桌面安装)、Apache、PHP。

到目前为止,我已经有了一个bash脚本,它接受一个参数(URL),启动firefox,抓取屏幕并将其保存为PNG。我试过在终端机上运行这个,它运行得很好。

下面是Bash脚本:

代码语言:javascript
复制
#!/bin/bash
firefox $1 # Start firefox and go to the passed in URL
scrot -d 5 test.png # Take screen grab with 5 second delay

接下来,我创建了一个使用shell_exec运行脚本的简单PHP页面:

代码语言:javascript
复制
<?
  // Sample URL
  $url = 'http://www.google.com'; 
  // Run the script
  shell_exec('sh script.sh ' . $url);
  // Out put HTML to display image
  echo '<img src="test.png" />';
?>

但是,当PHP页面被调用时,屏幕不会被捕获。快速查看apache错误日志将显示以下消息:

错误:没有显示指定的字形错误:无法打开X显示。它在跑,是的

我猜这是因为apache作为一个不同的用户运行,无法访问我的X显示器。

所以,有人能说明我做错了什么,或者我如何捕捉当前用户的显示。

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-23 10:38:18

在我看来,从在Apache环境下运行的PHP中启动firefox似乎是个坏主意(这肯定让人觉得不对)。

我会这么做的:

  • 接收URL的PHP页面(运行在Apache下);类似于表单,例如
    • 该页面在类似数据库的系统中插入URL,该系统将用作队列。
    • 此URL标记为“要处理”

  • PHP (或其他语言)脚本,完全独立于Apache;例如,由crontab 启动
    • 此脚本从数据库中的队列中选择一个URL (例如最近的一个),并将其标记为“处理”
    • 然后,它将调用shell脚本,启动firefox并进行屏幕截图。
    • 完成屏幕截图,队列中的URL标记为“已完成”,屏幕快照的路径与URL相关联
    • 这是可行的,因为它独立于Apache。

  • 另一个网页显示队列和每个URL的状态(“要处理”、“处理”、“完成+屏幕截图的路径” )
    • 您甚至可以想象,在用户和URL之间存在一个关联,而不是向每个人显示每个URL+screenshot。

有了这个系统,有几个优点:

  • 网页的php+apache
  • apache之外的php用于“系统”部件
  • 您可以将网页放在一台服务器上。
  • 您可以使用多台机器(linux、windows、mac -也许使用虚拟机)来制作屏幕截图。
    • 允许您从不同的OSes获取屏幕截图
    • 尺度要好得多^^

这并不是问题的真正答案,但我认为这是一个更好的方法.希望这能帮上忙!

票数 2
EN

Stack Overflow用户

发布于 2009-07-23 11:44:19

下面是一个使用火狐和xvfb进行屏幕捕获的指南。这种方法的优点是在您的主X服务器上不会有firefox窗口打开和关闭。它还将解决您的权限问题。

票数 2
EN

Stack Overflow用户

发布于 2009-07-23 10:06:21

您不能以与apache相同的用户身份运行bash和firefox吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1170773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档