使用php将命令行执行显示为弹出窗口或窗口

时间:2017-01-11 10:22:14

标签: php

当从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

3 个答案:

答案 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;