2010-06-02 3 views
0

J'essaye de créer un démon PHP qui se connecte à un serveur IMAP et qui traite les courriels dès qu'ils arrivent. Je l'ai presque sur le point de fonctionner, mais le démon continue de saisir les courriels d'origine trouve la première fois que le démon est chargé. Je crois que la raison est parce que j'ouvre la connexion IMAP dans le processus parent. Exemple ci-dessous:Problèmes avec PHP System_Daemon et la connexion IMAP

if ($imapConnection=imap_open($authhost,$user,$pass) or die()) 
{ 
    //start daemon 
    while() 
    { 
    //Grab email headers 
    $imapHeaders = imap_headers($imapConnection); 
    $count = sizeof($imapHeaders) 

    //loop the emails 
    for($i = 1; $i <= $count, $i++) 
    { 
     //process the email 
     //delete the email 
    } 

    System_Daemon::iterate(15); 
    } 
} 
imap_close($imapConnection); 

Je voudrais éviter de mettre la connexion IMAP dans la boucle. Comment puis-je conserver la connexion au serveur IMAP en dehors de la boucle et recevoir de nouveaux messages?

Répondre

1

En mode IMAP, les mails restent sur le serveur. Donc, chaque fois que vous venez, si vous ne les avez pas explicitement supprimés, les anciens e-mails sont toujours là. Pour éviter le traitement de ces courriels, vous pourriez avoir un var qui garde le nombre de courriels que vous avez traités auparavant, donc vous pouvez passer de $ i = 0 (supposé le dernier arrivé) à $ i $ var où $ var représente le nombre de mails déjà traités.

EDIT:

Puisque vous supprimez le courrier par imap_delete, faites un imap_expunge à chaque boucle.

EDIT 2:

Utilisez imap_reopen, j'ai essayé vous script sur mon serveur en utilisant imap_reopen($imapConnection, "{domain.tld}INBOX"); après chaque boucle et il voit le nouveau message maintenant. Ne fait pas une nouvelle authentification, il suffit de déplacer votre flux.

+0

Je supprime réellement les courriels dans la boucle après que j'ai fini de les traiter. Dois-je toujours faire ce que vous suggérez si je supprime les courriels? – mike

+0

En outre, une fois le démon démarré, il ne semble pas trouver de nouveaux messages électroniques par la suite. C'est pourquoi je pense que cela a quelque chose à voir avec la connexion en dehors de la boucle. Il ne sait même pas que j'ai supprimé les courriels et continue de faire la boucle sur les mêmes. – mike

+0

Ok. Peut-être avez-vous un problème de cache et vous pouvez essayer [imap_open] (http://fr.php.net/manual/fr/function.imap-open.php) avec l'option OP_SHORTCACHE? –