我使用url2bmp.exe用php捕获网站屏幕截图。我的代码如:
<?php
$cmd = 'url2bmp.exe -url "http://www.filmgratis.tv/index.php/category/film/animazione" -format jpeg -file"C:\www\Screenshot\screenshoot.jpg" -wait 5 -notinteractive run and exit when done -removesb remove right scroll bar';
system($cmd);
?>
但是有一段时间,网站页面有一些加载问题,url2bmp将在此站点停止,并且永远不会关闭自己仍在等待加载页面。如果遇到这种情况,如何使用php代码在5秒内运行后终止url2bmp.exe?
另一个问题,该网站将在一个新的ie窗口弹出广告,如何停止用PHP打开一个新的ie窗口?感谢。
答案 0 :(得分:1)
您无法设置超时,但是如果超过5秒超时,您可以监视进程并将其终止。这是Windows上的一些代码(来自here)(请参阅适用于Linux的here)。 $command
是要执行的命令,$timeout
是让进程运行多长时间(在你的情况下是5秒)而$sleep
是超时检查之间的间隔(1秒应该是合适的)对于你的情况)。
function PsExecute($command, $timeout = 60, $sleep = 2) {
// First, execute the process, get the process ID
$pid = PsExec($command);
if( $pid === false )
return false;
$cur = 0;
// Second, loop for $timeout seconds checking if process is running
while( $cur < $timeout ) {
sleep($sleep);
$cur += $sleep;
// If process is no longer running, return true;
echo "\n ---- $cur ------ \n";
if( !PsExists($pid) )
return true; // Process must have exited, success!
}
// If process is still running after timeout, kill the process and return false
PsKill($pid);
return false;
}
function PsExec($commandJob) {
$command = $commandJob.' > /dev/null 2>&1 & echo $!';
exec($command ,$op);
$pid = (int)$op[0];
if($pid!="") return $pid;
return false;
}
function PsExists($pid) {
exec("ps ax | grep $pid 2>&1", $output);
while( list(,$row) = each($output) ) {
$row_array = explode(" ", $row);
$check_pid = $row_array[0];
if($pid == $check_pid) {
return true;
}
}
return false;
}
function PsKill($pid) {
exec("kill -9 $pid", $output);
}