Bir döngü içinde e-posta gönderirken geçmek için zamanın miktarı ayarlama

2 Cevap php

Bu çaylak soru için beni affedin, ama bir komut dosyası aracılığıyla e-postalar göndererek arasında geçmek zorunda zaman belli bir miktar (örneğin mili / saniye) olarak ayarlar böyle bir ayar var mı? Nasıl denir ayarı olduğunu ve nerede o ayar değiştirebilirim?

I'll give an example: I used to have a PHP script that sends emails like so:

for ($i=0; $i<count($emails); $i++) {
     mail($email[$i],'test','test');
}

Bu komut dosyası sunucu tarafından gerekli olduğu e-postalar göndererek arasında yeterli zaman yoktu o kadar hızlı koştu çünkü tüm e-postalar başarıyla gönderildiği ortaya çıktı.

Ben mantıklı mı?

2 Cevap

Bir süre için do nothing bu işlevlerden birini kullanabilirsiniz:

  • sleep() : saniye sayısı için program yürütme geciktirir.
  • usleep() : mikro saniye sayısı için gecikmeler program yürütme.


Putting one of those in your loop should help.
For example :

for ($i=0; $i<count($emails); $i++) {
    mail($email[$i],'test','test');
    usleep(100*1000); // 100 milli-seconds
}

Bu script denenmemiş ama teori sestir. Her gönderme posta üzerine posta gönderdi olmadığını görmek için bir gecikme dizisi ile kontrol edin. Baskı ile, yürütme zaman bir problem olmamalı - Ben komut dosyası başarısız olmaz sağlamak için bir sınır koyduk.

for ($i=0; $i<count($emails); $i++) {
   $sent = mail($email[$i],'test','test');
    $count = 0;

   while($sent == false) {
    usleep(500); // half a second - test this number until the minimum is found
    $count++;

    if($count == 1000) {
        echo "Email to " . $email[$i] . " failed due to timeout</br>";
        break;
    }
   }
}

Bu yardımcı olur?