如何动态地查看从脚本加载的数据?

时间:2014-02-06 21:24:07

标签: php html arrays

好的以下脚本功能正常但不是很好。 我在数组中发布数据并批量发布到exec命令。 一切正常,经过一段时间后,我得到了一个结果。这是一个需要很长时间的问题。 我希望看到结果,因为我们希望看到数组在我的PHP脚本中逐行汇总而不是一大块数据。

这是我的代码:

<html>
<body>
<form method="post">
    <div align="center">
        <textarea name="mp" cols="60" rows="10">0|1|2</textarea>
        <br />

    Delim:
        <input type="text" name="delim" value="|" size="1" />&nbsp;

        data1:
        <input type="text" name="mail" value="0" size="1" />&nbsp;

        data2:
        <input type="text" name="prx" value="1" size="1" />&nbsp;

    <input type="submit" value=" send " name="btn-submit" />
</div>
</form>
</body>
</html>

<?php
    putenv("PHANTOMJS_EXECUTABLE=/usr/local/bin/phantomjs");

    if (isset($_POST['mp'], $_POST['delim'], $_POST['btn-submit'], $_POST['mail'], $_POST['prx'])) {
        $mps = preg_split('/\r\n|\r|\n/', $_POST['mp']);

        // Create an array to store results
        $result_data = array();

        // Iterate over requests
        foreach ($mps as $mp) {
            $mp = explode($_POST['delim'], $mp);

            // Store the account details in variables
            $email = $mp[$_POST["mail"]];
            $proxy = $mp[$_POST["prx"]];

            // Prepare a reusable string
            $result_string = "/usr/local/bin/casperjs test.js \"" . $email.  "\" \"" . $proxy . "\" 2>&1";

            // Add result to the array
            $result_data[] = $result_string;
        }

        // Store of results complete. We now display them.
        if (count($result_data)) {
            foreach ($result_data as $result_data_entry) {
                echo exec($result_data_entry);
            }

            echo "</ul>";
        }
    }
?>

我该怎么做?

3 个答案:

答案 0 :(得分:2)

你不能用PHP做到这一点。 PHP在服务器端执行,而不是客户端执行。这意味着在将结果发送给用户之前,所有结果都已找到。但是,您可以使用Javascript来执行此操作。我不确定你会怎么做,但可能有办法动态查看查询结果。

答案 1 :(得分:1)

您可以使用支持增量输出的Symfony Process组件。

示例:

foreach ($mps as $mp) {
        // ...

        $result_string = new Process("/usr/local/bin/casperjs test.js \"" . $email.  "\" \"" . $proxy . "\" 2>&1");
        $result_data[] = $result_string;
    }

    // Store of results complete. We now display them.
    if (count($result_data)) {
        while (count($result_data_entry) > 0) {
            foreach ($result_data_entry as $i => $process) {
                if (!$process->isStarted()) {
                    $process->start();
                    continue;
                 }

                 echo $process->getIncrementalOutput();

                if (!$process->isRunning()) {
                    unset($result_data_entry[$i]);
                }
            }
            sleep(1);
        }
    }

答案 2 :(得分:0)

您是否尝试过使用

flush();

echo exec($result_data_entry);