Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 一次输出一个循环,而不是一次输出所有循环?_Php - Fatal编程技术网

Php 一次输出一个循环,而不是一次输出所有循环?

Php 一次输出一个循环,而不是一次输出所有循环?,php,Php,我正在运行PHPSOAP,循环运行了10次迭代。我遇到的问题是,在循环完成之前,它不会输出,从而一次显示每个输出。 我如何让它在循环过程中一次输出一个,而不是在完成整个10个循环后一次输出全部 <?php $loops = 0; // set loops to 0 // connection credentials and settings $location = 'https://theconsole.com/'; $wsdl = $location.'?wsdl'; $userna

我正在运行PHPSOAP,循环运行了10次迭代。我遇到的问题是,在循环完成之前,它不会输出,从而一次显示每个输出。
我如何让它在循环过程中一次输出一个,而不是在完成整个10个循环后一次输出全部

<?php

$loops = 0; // set loops to 0

// connection credentials and settings
$location = 'https://theconsole.com/';
$wsdl = $location.'?wsdl';
$username = 'user';
$password = 'pass';

// include the console and client classes
include "class_console.php";
include "class_client.php";

// create a client resource / connection
$client = new Client($location, $wsdl, $username, $password);

while ($loops < 10)   
    {
    $dostuff;
    $echo "It has done: " .$stuff; // display output
    ob_end_flush(); ob_flush(); flush(); ob_start(); // added as per comments below - still not working
    }
?>

谢谢

查看一下

Try命令,如果处理输出缓冲,也可以使用该命令

编辑: 这似乎是命令的一个问题,如果您阅读了注释(甚至是开发人员的注释),则表明如果在脚本中调用了sleep,则在运行它之前不会输出任何内容。如果你循环睡眠呼叫,你必须等到循环结束


阅读评论“mohd at Bahrain dot Bz 16-Dec-2009 09:12”,该方法确实有效,但每次都必须填充缓冲区:(.

如果希望在每次迭代中输出每一行,可能需要刷新()和/或ob_flush()

但是,请注意,这并不能绝对保证每一行都可以使用,因为web服务器可能也在进行自己的缓冲。

(在IEx和Firefox下测试)



使用此代码,这对我很有用。

@Dov是您使用任何类型框架的包含类吗?Zend Cake等…?正在发生某种需要删除的缓冲。另一件事,请在第二个和第三个浏览器中尝试您的页面,因为防病毒软件正在安装工具栏/插件,这些工具栏/插件可以进行缓冲和/或接管HTTP错误代码(即500 400)@Viper_Sb:这两个类都只使用公共函数。我在禁用插件的FF、IE和Chrome中进行了尝试。仍然没有运气:/@Dov好的,可以尝试的一件事是:ob_end_flush();ob_flush();flush();ob_start();一个接一个,但这不应该出现在任何生产资料中,但可能会起作用。@Viper\u Sb:感谢您的帮助!更新的代码-仍然没有运气。@Viper\u Sb:谢谢。睡眠已移除,没有区别。
<?php
if (ob_get_level() == 0) ob_start();

for ($i = 0; $i<10; $i++){
        echo "<br> Line to show.";
        echo str_pad('',4096)."\n";  

        ob_flush();
        flush();
}
echo "Done.";
ob_end_flush();
?>