【问题标题】:save image when using php shell_exec and mac osx terminal command screen capture?使用 php shell_exec 和 mac osx 终端命令截屏时保存图像?
【发布时间】:2011-12-25 21:31:53
【问题描述】:

我正在尝试使用 shell_exec 和命令,但我似乎无法完成这项工作。我使用 php shell_exec() 函数并运行屏幕捕获命令来拍摄桌面快照。通过 coda 在本地运行脚本时,它工作正常。然后我通过 htdocs 安装 apache 运行它,它运行,但它没有将图像保存在任何地方?对于浏览器,我是否需要更改目录?这就是我的超级简单脚本的样子。这甚至可能吗?

   <?
   $command = "screencapture -iWP ~/Random/test.png";
   shell_exec($command);
   ?>

【问题讨论】:

    标签: php macos shell terminal


    【解决方案1】:

    我目前无法使用 Mac 进行测试,但如果这确实有效,我会感到非常惊讶和担心。

    在服务器上,apache 应该在与登录用户不同的用户 ID 下运行,这意味着获取帧缓冲区的尝试应该失败。

    如果它至少写入(或尝试写入)图像,那么它将是 ~/Random/test.png;例如如果 apache 以名为 apache 的用户身份运行,则目标文件名为 ~apache/Random/test.png

    OSX 基本上是 UNIX,类 UNIX 操作系统的一个关键特性是安全性。只有在登录用户(或 root)的 UID 下运行的进程才能访问视频帧缓冲区。像 apache httpd 这样的守护进程应该在它们自己的非 root UID 下运行。

    【讨论】:

    • 显然,如果它在用户端工作,这将是一个巨大的安全问题,但命令仍然运行,所以我不知道它保存文件的位置(如果它甚至是)。我使用 apache 的 XAAMP 安装,所以根 localhost 文件夹在 htdocs 中,但仍然注意。但是,如果我有一个 mac 服务器正在运行,这真的可以吗?它会截取服务器的屏幕,而不是用户,对吧?
    • 我将编辑我的答案;在服务器上,httpd 和桌面会话应该是不同的 UID。
    【解决方案2】:

    您可能必须指定可执行文件的完整路径。此外,指定输出 PNG 的完整路径也会有所帮助,因为他们是不同的用户。

    运行命令

    which screencapture
    

    查找可执行文件所在的路径。输出文件必须位于运行 apache 的用户(通常是 apache)的可写目录中。您可以通过查看 apache 配置来检查运行 apache 的用户,或者只是运行“top”(以 root 身份)。

    希望对您有所帮助。

    【讨论】:

    • 对不起,我有点菜鸟,我打开了配置文件,我在哪里可以找到用户?
    • 每个发行版都不同...如果你运行 "grep -rin "user" 。"在带有配置的目录中,您可能会看到包含 apache“用户”指令的行......在 Ubuntu 中,配置文件实际上被分成许多文件......只需尝试找到“用户”指令。 ..
    猜你喜欢
    • 1970-01-01
    • 2012-09-10
    • 2014-12-29
    • 2010-11-19
    • 1970-01-01
    • 2014-06-19
    • 2016-10-26
    • 1970-01-01
    • 2014-03-31
    相关资源
    最近更新 更多