当从php执行终端命令时,需要将终端执行显示为弹出窗口或视频,如流式传输。要将输出输出到浏览器就像这样。但是也必须在控制台中显示输出。
$script= 'cd /var/www/html/project_direcoty;java -cp <script>;
while(@ob_end_flush());
ini_set('implicit_flush', true);
ob_implicit_flush(true);
$proc = popen($script,'r');
echo '<pre>';
while(!feof($proc)){
echo fread($proc, 4096);
@ flush;
}
ob_flush();
$_SESSION['case_id']= '';
echo '</pre>';
但需要像弹出窗口一样显示执行情况。有可能吗?
使用MTS修改代码
$shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', false);
$shell->exeCmd('cd /var/www/html/folderpath');
$cmd = 'java -cp "libs/*:bin" org.testng.TestNG '.$cases['case_id'].' 2>&1';
$return1 = $shell->exeCmd($cmd);
$windowObj = \MTS\Factories::getDevices()->getLocalHost()->getBrowser('phantomjs')->getNewWindow($return1);
$width = 640;
$height = 480;
$windowObj->setSize($width, $height);
$windowObj->close();
$shell->terminate();
echo $return1;
得到这样的输出。
Fatal error: Uncaught Exception: MTS\Common\Devices\Shells\Bash::shellStrExecute>> Read data timeout in /var/www/html/MTS/MTS/Common/Devices/Shells/Bash.php:81 Stack trace: #0 /var/www/html/MTS/MTS/Common/Devices/Shells/Base.php(89): MTS\Common\Devices\Shells\Bash->shellStrExecute('java -cp "libs/...', '\\[bash\\.58787dd...', 10000) #1 /var/www/html/Sandbox_oway/admin/run-test-cases.php(84): MTS\Common\Devices\Shells\Base->exeCmd('java -cp "libs/...') #2 {main} thrown in /var/www/html/MTS/MTS/Common/Devices/Shells/Bash.php on line 81
答案 0 :(得分:1)
您可以使用MTS
它是PHP的工具集。目前由两个核心组件组成 shell和browser.This项目致力于为开发人员提供工具 这让他们自动化为人们设计的流程。
请从GitHub wiki了解有关要求和安装的信息。
在您的情况下,您需要在新窗口中显示。是的,你可以展示。
此处使用 PhantomJS 。您可以使用 PHP 打开网站并执行标准功能。
//Some websites are either far away or just slow, so it is a good idea to up the allowed execution time.
ini_set('max_execution_time', 120);
//Get a new browser window:
$myUrl = "https://www.yourwebsite.com/";
$windowObj = \MTS\Factories::getDevices()->getLocalHost()->getBrowser('phantomjs')->getNewWindow($myUrl);
$windowObj
现在包含一个加载了您网站的浏览器窗口。
您可以从此page了解更多信息。
答案 1 :(得分:0)
通过将popen输出保存到文本文件以及稍后通过调用显示文件输出到html的ajax调用来实现其他方法。
答案 2 :(得分:0)
MTS可以让你返回一个命令。但是在您的示例中,您将(空)返回传递给PhantomJS无头浏览器,而不是传递给发出请求的客户端。
以下是更正后的示例:
//you will get the "Read data timeout" exception if your command takes longer than the default timeout in milisecs. make sure the value is high enough.
$timeOut = 100000;
$shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', false);
$shell->exeCmd('cd /var/www/html/folderpath');
$cmd = 'java -cp "libs/*:bin" org.testng.TestNG '.$cases['case_id'].' 2>&1';
$return1 = $shell->exeCmd($cmd, null, $timeOut);
$shell->terminate();
//the return from your command, however since you are redirecting the output/error pipes (2>&1) this variable will be empty. If your command displays data, remove the redirect to get data.
echo $return1;