首页 > 解决方案 > PHP proc_open 调用程序并获取屏幕截图

问题描述

我正在尝试使用这个很酷的软件(http://www.nirsoft.net/utils/web_site_screenshot.html)运行一个进程以在 PHP 中截取网页的屏幕截图

此命令适用于 windows 命令行并创建网站的 .png 文件:

C:\Program Files\SiteShoter>SiteShoter.exe /URL http://www.msn.com /Filename "C:\wamp64\www\my-site\test.png" /BrowserAutoSize 1 /MaxBrowserHeight 25000 MaxBrowserWidth 1500 /BrowserTimeOut 2000 

我不明白如何使用 proc_open 在脚本中调用相同的命令。这是我尝试过但没有成功的方法:

$cmd     = "SiteShoter.exe /URL http://www.msn.com /Filename 'C:\wamp64\www\my-site\test.png' /BrowserAutoSize 1 /MaxBrowserHeight 25000 MaxBrowserWidth 1500 /BrowserTimeOut 2000";
$desc    = [['pipe', 'r'], ['pipe', 'w'], ['pipe', 'w']]; //I don't know if this is needed
$cwd     = 'C:\Program Files\SiteShoter';
$process = proc_open($cmd, $desc, $pipes, $cwd);

运行脚本时不会创建该文件。关于我可以尝试什么的任何想法?

标签: php

解决方案


答案是文件名参数格式化和转义一些双引号,因为命令行程序选择了它的参数。

$url = "http://www.msn.com";
$output_path = "c:/wamp64/www/my-site/";

$cmd     = "SiteShoter.exe /URL \"" . $url . "\" /Filename " . $output_path . "test-%date:yyyy-MM-dd%@%time:HHmm%.png /BrowserAutoSize 1 /MaxBrowserHeight 25000 MaxBrowserWidth 1500 /BrowserTimeOut 2000";
$descriptorspec = array();
$cwd = 'C:\Program Files\SiteShoter';
$env = NULL;

if ( $process = proc_open($cmd, $descriptorspec, $pipes, $cwd, $env) ) {
    proc_close($process);
}

无论如何,如果有人正在寻找一个好的程序来捕捉网页的图像,我推荐 NirSoft 的 SiteShoter。


推荐阅读