Döngü içinde PHP uyku () DB güncellemiyor

2 Cevap php

Ben bir cronjob tarafından her dakika ateş bir php dosyası var.

Php dosyası ateş zaman, veritabanını günceller uyur, vb

Bu gibi programlanır:

$start = microtime(true);
set_time_limit(10);

for($i=0;$i<5;$i++)
{
    updateDB();
    time_sleep_until($start + $i + 1);
}

Bu kod parçası çalıştırılırsa i veritabanında oluyor herhangi bir değişiklik görmüyorum. I fark başka bir şey ben bir şey echo döngü tek parça sona erdiğinde i yazdırılır olduğunu.

[Değiştir] floş ve ob_flush kullanarak çalıştı, ama hala çizgi [/ edit] için baskı hat vermedi

Ben bu hataları önlemek için ne yapabilirim. Veritabanı güncelleştirilmesi gerekmektedir.

Ben merak ediyorum başka bir şey en iyi yolu, bu tür bir şey oturum budur. I bir günlük dosyasına sonuçları giriş yapabilirsiniz.

2 Cevap

Döngü kendisi gayet iyi görünüyor. Bu veritabanı güncelleme değilse, hata updateDB() fonksiyonu olmalıdır.

Yankı şey gibi. Dizelerin çıkışı genellikle tamponlu edilir. Hemen yazdırmak için PHP zorlamak için çıkış kızardı istediğiniz zaman, ya çağrı flush() arayabilir, ya da sadece script üstündeki ob_implicit_flush() çağırabilir ve floş olacak otomatik olarak her zaman bir şeyler yazdırmak.

Eğer bir tarayıcı üzerinden dosyası arayarak eğer Ayrıca, tarayıcı kendisi de size göstermeden önce yanıtı tampon olabilir.

Ve günlük olarak, basit yolu bir yerde bir dosyayı almak ve sadece file_put_contents() Eğer oturum açmış istersen yazdırmak için kullanmaktır. Üçüncü parametre için FILE_APPEND bayrağı unutmayın.

Bu durumda hiçbir tamponlama olduğunu böylece stderr'e yazmak isteyebilirsiniz, komut satırından çalışan gibi görünüyor. $ Stderr = fopen ('php :/ / stderr', 'w');

Günlüğü durumunda, sadece bir dosyayı açmak için yazmak ve kapatın. (Fopen, fwrite, fclose);