2015-06-20 12 views
35

Gmail'imde 2465 e-posta var, program neden tüm e-postaları indirdikten sonra duramıyor? Tüm kod1 ve kod2 komut satırı modunda çalıştırılır.
code1: Kod1 içinneden tüm e-postaları indirdikten sonra program duramıyor?

<?php 
$mailbox = array(
    'mailbox' => '{imap.gmail.com:993/imap/ssl}INBOX', 
    'username' => '[email protected]', 
    'password' => 'yyyy' 
); 

$stream = imap_open($mailbox['mailbox'], $mailbox['username'], $mailbox['password']) 
    or die('Cannot connect to mailbox: ' . imap_last_error()); 
$emails = imap_search($stream,"ALL"); 
$nums=imap_num_msg($stream); 
echo $nums; 
foreach($emails as $email_id) { 

      $mime = imap_fetchbody($stream, $email_id, ""); 
      file_put_contents("/tmp/" . "email_{$email_id}.eml", $mime); 
     } 

imap_close($stream); 
echo "over"; 
?> 

: İndirme 1.Can
tüm e-postalar.
2. konsolda çıkış 2465 konsolda
3.no over çıktı.
4. Program duramıyor, sonsuza kadar sürüyor gibi görünüyor.

code2: code2 için

<?php 
$mailbox = array(
    'mailbox' => '{imap.gmail.com:993/imap/ssl}INBOX', 
    'username' => '[email protected]', 
    'password' => 'yyyy' 
); 

$stream = imap_open($mailbox['mailbox'], $mailbox['username'], $mailbox['password']) 
    or die('Cannot connect to mailbox: ' . imap_last_error()); 
$emails = imap_search($stream,"ALL"); 
$nums=imap_num_msg($stream); 
echo $nums; 
foreach($emails as $email_id) { 
      echo $email_id.PHP_EOL; 
      $mime = imap_fetchbody($stream, $email_id, ""); 
      file_put_contents("/tmp/" . "email_{$email_id}.eml", $mime); 
     } 

imap_close($stream); 
echo "over"; 
?> 

: İndirme 1.Can
tüm e-postalar.
2. Konsolda 2465 çıkış.
3. Konsolda over çıktı.
4. Program tüm e-postaları indirdikten sonra durur.

Kod1 kod1'den daha fazla bir satır echo $email_id.PHP_EOL; var, diğer kodlar aynı.
Tüm kod1 ve kod2 komut satırı modunda çalıştırılır.
Bunu kim açıklayabilir?

enter image description here

+1

Hiçbir şey yapmadan asılı kaldığını mı söylüyorsunuz? CPU% 100 olmadığı sürece, muhtemelen bazı sistemlerde kilitleniyor,… 'strace' den sonra en son sistemlerin ne olduğunu görün. – bwoebi

+0

** imap_timeout ** ile e-posta almak için ayarları zaman aşımına uğratın - yankınız yanlışlıkla ikinci zaman için bu zaman aşımını yapabilir. – Jehy

+0

Hala hatayı yeniden üretebiliyor musunuz? Eğer öyleyse, hangi php sürümünü kullanıyorsunuz ve betikleri çalıştırırken hangi kabukları kullanıyorsunuz? – cb0

cevap

0

Kontrol imap_fetchbody() işlevi, bu işlevi indirme sınırını ayarlamak ve bununla tüm posta indirmeleri sonra durdurabilirsiniz verir. Aşağıdaki kodu kontrol edin, tüm postalar indirildikten sonra indirme işlemini durduracak kodunuzda bazı değişiklikler yaptım. Lütfen bir kez kontrol edin.

<?php 
$mailbox = array(
    'mailbox' => '{imap.gmail.com:993/imap/ssl}INBOX', 
    'username' => '[email protected]', 
    'password' => 'yyyy' 
); 

$stream = imap_open($mailbox['mailbox'], $mailbox['username'], $mailbox['password']) 
    or die('Cannot connect to mailbox: ' . imap_last_error()); 

//Check all mails... 
$imap_obj = imap_check($stream); 

// Fetch an overview for all messages in INBOX... 
$nums=imap_num_msg($stream); 
$emails = imap_fetch_overview($stream,"1:{$imap_obj->Nmsgs}",0); 

echo $nums; 
//Loop until mail data... 
foreach($emails as $objEmail_data) { 
    $mime = imap_fetchbody($stream, $objEmail_data->msgno, ""); 
    file_put_contents("/tmp/" . "email_{$objEmail_data->msgno}.eml", $mime); 
} 

imap_close($stream); 
echo "over"; 
?> 

Ve sonuçlara bakın!

'u imap_fetch_overview() ile değiştirdim ve bazı ilgili değişiklikler yaptım.

Daha fazla yardım gerekiyorsa bildirin.

+0

içinde kontrol edin, her türlü durumu test ettim. –

+0

Tüm kod, kod1 kod2 ve AddWeb Çözüm Pvt Ltd'code benim vps bağlamak için macun ile çalışabilir ve hem komut satırı modunda hem de tarayıcı modunda tüm aynı sonucu alabilirsiniz. yerel işletim sistemi pencereleri, sunucu işletim sistemi debian7. –

+0

yerel işletim sistemi debian7, sunucu işletim sistemi debian7, kodum1 tarayıcı modda çalışır, istenen sonucu alır.kodum1 komut satırı modunda çalışır, tüm e-postaları indirdikten sonra duramaz. –

1

önce

print imap_last_error(); 

Deneyin ve imap_close sonra e-postalar değişkenleri Sıfırladığınız

-1
<?php 
$mailbox = array(
    'mailbox' => '{imap.gmail.com:993/imap/ssl}INBOX', 
    'username' => '[email protected]', 
    'password' => 'yyyy' 
); 

$stream = imap_open($mailbox['mailbox'], $mailbox['username'], $mailbox['password']) 
    or die('Cannot connect to mailbox: ' . imap_last_error()); 
$emails = imap_search($stream,"ALL"); 
$nums=imap_num_msg($stream); 
//echo $nums; // removed this 
foreach($emails as $email_id) { 

      $mime = imap_fetchbody($stream, $email_id, ""); 
      file_put_contents("/tmp/" . "email_{$email_id}.eml", $mime); 
     } 
unset($emails); // added this 
imap_close($stream); 
die ("over"); // changed this 
?> 

senin sorunun nedenleri hakkında daha fazla bilgi edinmek.

+0

Sorunun bütün noktası, "foreach" döngüsünü asla terk etmemesidir. – miken32

İlgili konular