在更新数据库期间显示进度栏

时间:2014-10-11 15:12:53

标签: php progress-bar sleep

我有一张包含10000000条记录的表ArsehBaigany, 我想更新ArsehBaigany的所有记录。

PHP代码:

     $ArsehBaiganyRows=$dbHandle ->query("select from ArsehBaigany where code like '2'");
     echo "<br>Start...<br/>";
     $i=1;
    foreach($ArsehBaiganyRows as $ArsehBaiganyRow)
    {   

        $query="update ArsehBaigany
                                set Daste='183837732828',Noe='33992928487839002'
                                where 
                                Code='".$ArsehBaiganyRow["code"]."' ";

        $update=$dbHandle->query($query);
        if(empty($update))
        {
             echo "<span style='color:red'>error".$i++."</span><br>".$query;                
        }
        else
            echo "ok";

        //rename file

        $fromFile= trim($ArsehBaiganyRow["ext"])    ;
        $toFile=trim($uploadDir)    ;
        if(file_exists($fromFile) )
        {
             $renname= rename($fromFile, $toFile) ;
             if($renname)
             {
                echo "ok ";         
             }
             else
                echo "<span style='color:red'>error</span>";

        }

        echo "<br/>next file<br/>";

         flush();
    }

    echo "<br>finish<br/>";

脚本完成后,浏览器会自动关闭。 为什么echo不起作用?并且仅在脚本完成时可见?

我想实时显示错误。 以及如何添加进度条?

1 个答案:

答案 0 :(得分:0)

$ArsehBaiganyRows=$dbHandle ->query("select from ArsehBaigany where code like '2'");

if (ob_get_level() == 0)
    ob_start();

echo "<br>Start...<br/>";
echo str_pad('', 4096);
ob_flush();
flush();
$i=1;
foreach($ArsehBaiganyRows as $ArsehBaiganyRow)
{

    $query="update ArsehBaigany
                                set Daste='183837732828',Noe='33992928487839002'
                                where 
                                Code='".$ArsehBaiganyRow["code"]."' ";

    $update=$dbHandle->query($query);
    if(empty($update))
    {
        echo "<span style='color:red'>error".$i++."</span><br>".$query;
        echo str_pad('', 4096);
        ob_flush();
        flush();
    }
    else
    {
        echo "ok";
        echo str_pad('', 4096);
        ob_flush();
        flush();
    }

    //rename file

    $fromFile= trim($ArsehBaiganyRow["ext"])    ;
    $toFile=trim($uploadDir)    ;
    if(file_exists($fromFile) )
    {
        $renname= rename($fromFile, $toFile) ;
        if($renname)
        {
            echo "ok ";
            echo str_pad('', 4096);
            ob_flush();
            flush();
        }
        else
        {
            echo "<span style='color:red'>error</span>";
            echo str_pad('', 4096);
            ob_flush();
            flush();
        }

    }

    echo "<br/>next file<br/>";
    echo str_pad('', 4096);
    ob_flush();
    flush();
}

echo "<br>finish<br/>";
ob_end_flush();

对于进度条,您需要使用javascript,因为据我所知,您可以将回显消息重写到浏览器中。