2010-11-09 123 views
0

嗨,我试图写在我需要设置睡眠时间对于每一行,然后只要继续处理设定睡眠时间while循环在PHP

更新脚本的过程是如此巨大和不能立即完成(切换拉丁-1字符集到UTF-8)然后我需要在每一行转换后的睡眠时间

这是一个通常的工作代码转换为utf-8但睡眠时间doesn没有工作,一次又一次地完成。

ob_implicit_flush(); 

$result = $db->sql_query("SHOW TABLES"); 
while ($row = $db->sql_fetchrow($result)) { 
    $db->sql_query("ALTER TABLE $row[0] COLLATE $collation"); 
    $result1 = $db->sql_query("SHOW COLUMNS FROM $row[0]"); 
    while ($row1 = $db->sql_fetchrow($result1)) { 
    if (preg_match('~char|text|enum|set~', $row1["Type"])) { 
    $db->sql_query("ALTER TABLE $row[0] MODIFY $row1[Field] $row1[Type] CHARACTER SET binary"); 
    $db->sql_query("ALTER TABLE $row[0] MODIFY $row1[Field] $row1[Type] COLLATE $collation" . ($row1["Null"] ? "" : " NOT NULL") . ($row1["Default"] && $row1["Default"] != "NULL" ? " DEFAULT '$row1[Default]'" : "")); 
    } 
    echo"sleep for 2 seconds ....<br> $row[0] is already converted."; 
// wait for 2 seconds 
    usleep(2000000); 
    // back! 
    echo date('h:i:s') . "\n"; 

    } 

} 
+0

这个过程可能是“巨大的”,但你可以通过PHP“堆栈”MySQL查询。该过程不会比没有堆栈(或查询之间的时间...)更长。你所做的一切可能会让它更长。 PHP引擎!= MySQL引擎 – Shikiryu 2010-11-09 09:03:32

+1

谢谢,但请不要介意写一个示例脚本作为答案? – 2010-11-09 09:08:46

回答

-1

我没有看到你的睡眠努力。在这两秒钟内你还在等什么?脚本在睡觉时不能做其他工作。

0

看来你是每个表之间没有每列更新之间的“睡” - 就是这样,你希望它是什么?无论如何,如果数据很大2秒可能太低时间

还有一个在Windows PHP中的错误,你必须设置无限的时间限制或睡眠会导致高CPU使用率。

set_time_limit(0); 
0

与Simon不同,我可以看到在更新之间留下间隙有一些优点,但是为什么您要在单独操作中更新每列?如果你一次全部改变它,速度会更快。