Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php shell_exec和mac osx终端命令截屏时保存图像?_Php_Macos_Shell_Terminal - Fatal编程技术网

使用php shell_exec和mac osx终端命令截屏时保存图像?

使用php shell_exec和mac osx终端命令截屏时保存图像?,php,macos,shell,terminal,Php,Macos,Shell,Terminal,我正在试验shell_exec和命令,但我似乎无法完成这项工作。我正在使用php shell_exec()函数并运行屏幕捕获命令来拍摄桌面快照。当通过coda在本地运行脚本时,它可以正常工作。然后我通过htdocs运行了我安装的apache,它运行了,但它没有将图像保存到任何地方?对于浏览器,我是否需要更改目录?这就是我的超级简单脚本的样子。这可能吗 <? $command = "screencapture -iWP ~/Random/test.png"; shell_e

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

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

我目前无法访问Mac电脑进行测试,但如果这真的有效,我会非常惊讶,甚至有点担心

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

如果它至少写了(或试图写)一个图像,那么它将是~/Random/test.png;e、 g.如果apache作为名为apache的用户运行,则目标文件名为~apache/Random/test.png


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

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

运行命令

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


希望这能有所帮助。

显然,如果它在用户端工作,这将是一个Huuuge安全问题,但该命令仍在运行,因此我不知道它将文件保存在何处(如果它在)。我使用的是apache的XAAMP安装,因此根localhost文件夹位于htdocs中,但仍然需要注意。但是,如果我有一台mac服务器在运行,这真的能工作吗?它将截图服务器的屏幕,而不是用户,对吗?我将编辑我的答案;在服务器上,httpd和桌面会话应该是不同的UID。对不起,我有点糊涂,我打开了配置文件,在其中可以找到用户吗?每个发行版都不同。。。如果在配置目录中运行“grep-rin”user“.”,您可能会看到包含apache“user”指令的行。。。在Ubuntu中,配置文件实际上被分成许多文件。。。只要试着找到“用户”指令。。。