【问题标题】:PHP script execute show results during executionPHP脚本在执行期间执行显示结果
【发布时间】:2016-11-07 19:43:11
【问题描述】:

当我在网络服务器上从我的浏览器执行 PHP 脚本时,我怎样才能做到这一点,它会在脚本仍在执行时显示该脚本的结果(代码有很多卷曲,完全处理大约需要 30 分钟)。我有两台服务器,其中一台在调用时显示每个“回声”,但在另一台服务器上,当脚本完全执行时,它会在 30 分钟后全部显示。两台服务器都在 apache, php 5.6 上运行 代码:

<?php
error_reporting('E_ALL');
ini_set('error_reporting', 'E_ALL');
set_time_limit ( 2);

$i=0;
$handle = fopen("filmyNasze.txt", "r");
if ($handle) {
    while (($line = fgets($handle)) !== false) {
        $line = explode("##", $line);
        $nazwafilmu = trim($line[0]);
        $linkfilmu = trim($line[1]);
        $linkfilmu = 'http://xxx.pl' . $linkfilmu;
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
        curl_setopt($ch, CURLOPT_URL, $linkfilmu); 
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array("Cookie: cda.player=html5"));
        curl_exec($ch);
        $result = curl_exec($ch);
        curl_close($ch);
        libxml_use_internal_errors(true);
        $doc2 = new DOMDocument();
        $doc2->loadHTML($result);
        $divid = str_replace('/video/', '', trim($line[1]));
        foreach( $doc2->getElementsByTagName('div') as $div ) { 
            if($div->getAttribute('id') == 'mediaplayer' . $divid) {
                $array = json_decode($div->getAttribute('player_data'), true);
                //echo $array["video"]["file"] . " ## ";                    
            }
        }
        echo $nazwafilmu . ' ## ' . trim($line[1]) . ' ## ' . $array["video"]["file"] . '<br />';
    }
    fclose($handle);
}
else {
    die('brak pliku .txt');
}

【问题讨论】:

  • Prolly 由于浏览器不一致而无法工作,但请尝试flush() 函数。
  • 刷新在这里没有帮助

标签: php apache


【解决方案1】:

您可以使用ob_flush()flush() 刷新PHP 的输出缓冲区。

http://php.net/manual/en/function.flush.php

<?php
    ob_start();
    echo 'Something';
    ob_flush();
    flush();
    ob_end_flush();

【讨论】:

  • 我已经用过它们,但它们不起作用。脚本在一台服务器上运行良好,但在第二台服务器上却不行。即使我在文件开头有 HTML 代码 (test),然后是 PHP 代码,它也不会显示“测试”。两台服务器都在运行 apache,所以我认为它的配置有问题或与 php 配置有关。
  • @monster1777 如果它甚至没有在页面开头打印静态 HTML,那么您可能在某处出现语法错误。尝试查看您的 Apache 日志。
  • 在 apache 日志中没有错误。就像我说的一样,同样的脚本可以在其他网络服务器上运行,flush 方法不起作用。但是,当我故意在脚本中出错时,它不会显示在 apache 日志中,甚至不会显示在浏览器中(我有错误报告)。好吧,我想我必须联系我的 VPS 提供商
  • 现在当我看到当我添加到脚本 ob_start() 某处时它在第二台服务器上不起作用(它在没有完美刷新的情况下工作)。也许它必须做一些事情,我必须在脚本开始时结束刷新?
猜你喜欢
  • 2011-07-21
  • 1970-01-01
  • 2014-04-29
  • 2018-03-29
  • 1970-01-01
  • 1970-01-01
  • 2011-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多