我没有顺利工作

时间:2014-03-26 15:34:46

标签: php ajax flush

我有以下脚本:

function follow($file)
{
    $currentSize = filesize($file);
    $size = $currentSize;
    $index=0;
    while ($index<$currentSize) {
    //echo "ENTERING   LOOP!!!!";
        clearstatcache();
        $currentSize = filesize($file);
        if ($size == $currentSize) {
            usleep(100);
            continue;
        }

        $fh = fopen($file, "r");
        fseek($fh, $size);

        while ($d = fgets($fh)) {
        ob_end_flush();
                echo $d;
        ob_flush();
        flush();
        ob_start();
        }

        fclose($fh);
        $size = $currentSize;
    $index=$index+1;
    }
}

follow("/var/www/devicemanagement/testFile.txt");

此脚本实时回显日志文件,在命令行中运行时效果很好。

以下html代码用于显示php脚本中的回显行:

<!DOCTYPE html>
<html>
    <head>
        <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.0/jquery.js"></script>
        <script>

            var sentData = {
                'param1': 'value1',
                'param2': 'value2'
            };

            function successCallback(returnedData) {
                $('#myDiv').html(returnedData);
            }

            function doAjaxCall() {
                $.get('/labtool/controllers/tailor.php', sentData, successCallback);
                //$.get('testFile.php', sentData, successCallback);
            }

            $(document).ready(function () {
                var id;
                $('#doStuff').click(function () {
                    clearInterval(id);
                    //$.get('testFile.php', sentData, successCallback);
                });
                id = setInterval(doAjaxCall, 1000);
            });
        </script>
    </head>
    <body>
        <div id="myDiv"><h2>Let AJAX change this text</h2></div>
        <button type="button" id="doStuff">Change Content</button>
        <div id="myDiv"></div>
    </body>
</html>

我知道关键是正确使用flush,但尽管我付出了最大的努力和大量的实验,但我无法让它发挥作用。

谁能看到我做错了什么?

1 个答案:

答案 0 :(得分:0)

这适用于我使用从许多来源收集的信息,包括stackoverflow,抱歉格式化。每次有文本要刷新时,只需调用函数:

function flush_message($msg) 
{


    echo $msg;
      // not a space, just '', I haven't tried removing it to see what happens
      // cause I should really be working on something else right now!
      echo str_pad('', 4096) . "\n";
      ob_flush();
      flush();

}

我也设置了

apache_setenv('no-gzip', 1);
ini_set('zlib.output_compression', 0);

在脚本的开头

显然还有许多特定于浏览器的问题(关于绘制输出之前的缓冲区大小),因此您可能希望在不同的平台上进行测试以了解它的执行情况。