2010-11-09 122 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不同,我可以看到在更新之間留下間隙有一些優點,但是爲什麼您要在單獨操作中更新每列?如果你一次全部改變它,速度會更快。