gpt4 book ai didi

php - PHP 中的系统($cmd)超时

转载 作者:可可西里 更新时间:2023-11-01 10:40:04 26 4
gpt4 key购买 nike

我使用 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 windows中弹出广告,如何阻止用php打开新的ie windows?谢谢。

最佳答案

您不能设置超时,但您可以监视进程并在它超过 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);
}

关于php - PHP 中的系统($cmd)超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4667602/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com