php - 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);
运行脚本时不会创建该文件。关于我可以尝试什么的任何想法?
解决方案
答案是文件名参数格式化和转义一些双引号,因为命令行程序选择了它的参数。
$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。
推荐阅读
- machine-learning - Keras中示例Siamese网络的准确率和错误率
- amp-html - 灯箱不工作的图像中的 AMP-SCRIPT
- python - TKINTER 问答游戏
- python - 如何限制在决策树分类器的特征重要性图上绘制的特征数量?
- permissions - XAMPP:[错误] InnoDB:innodb_system 数据文件“ibdata1”必须是可写的
- c++ - 在 CMake 项目中链接静态库 - 未定义的参考
- javascript - Native.withOrientation 不是函数
- algorithm - 稀疏矩阵的矩阵乘法速度是否比密集矩阵更快?
- algorithm - Karp-Reduction:顶点覆盖到半顶点覆盖
- r - 在 R 中使用 car 和 olsrr 包的 VIF