2009-06-24 6 views
0

J'ai construit un script php qui s'exécute à partir de la ligne de commande. Il ouvre une connexion dans un compte de messagerie POP3 et télécharge tous les e-mails et les écrit dans une base de données, et les supprime une fois téléchargés. J'ai ce script appelé depuis la ligne de commande par un fichier bat. à mon tour, j'ai créé une tâche planifiée qui appelle le fichier bat toutes les 5 minutes. La chose est que j'ai mis le temps à zéro pour le fait que parfois il pourrait y avoir des emails avec de grandes pièces jointes et le script télécharge effectivement les pièces jointes et les stocke en tant que fichiers bruts hors ligne et le timeout est que le script ne meurt pas lors du téléchargement.Le script PHP exécuté en tant que tâche planifiée se bloque - aide!

J'ai constaté que le programme se bloque parfois et c'est un peu ennuyeux à cela - il se bloque toujours sont un point, c'est à dire lors de la négociation de la connexion et se connecter au serveur de messagerie. Et parce que le timeout est mis à zéro, il semble rester coincé dans sa position. Et à cause de cela, la tâche n'est pas exécutée car techniquement accroché. Je veux que le programme ne devrait pas expirer lors du téléchargement des emails - cependant aux points où il négocie une connexion ou essaye de se connecter au serveur mail il devrait y avoir un timeout seulement à ce point lui-même et pas le reste du programme exécution.

Comment puis-je faire :(

+0

Comment vous vous connectez au compte de messagerie pop3? –

+0

Im utilisant des fonctions de code du projet webmail roundcube.net - c'est fondamentalement une modification du code. C'est assez facile à utiliser - toutes les fonctions sont bien documentées - il suffit de refaire une partie du code pour qu'il puisse s'exécuter à partir de la ligne de commande. – Ali

Répondre

0

La valeur de délai d'attente peut être réglée à l'aide socket_set_timeout() si vous utilisez prises directement. Vous pouvez jeter un oeil à this other question pour plus de détails. Si vous utilisez une bibliothèque, vous devrait vérifier ses documents, mais je voudrais plutôt vérifier si c'est vraiment est le problème de délai d'expiration Log php errors into a file et vous pouvez les parcourir tous.Réglez le max_execution_time à une valeur acceptable (comme 10 minutes) et vérifiez les journaux quand il se bloque à nouveau, si c'est toujours la même ligne où ça ne marche pas

0

J'ai rencontré ce problème récemment pour ceux qui sont à la recherche d'une réponse J'ai eu le programmeur de tâche appelant le fichier .php directement. Cela pendrait et ne retournerait jamais rien.

J'ai trouvé que l'exécution de firefox.exe et l'envoi de l'URL en tant que paramètre était la bonne façon d'exécuter un fichier .php via le gestionnaire de tâches.

firefox.exe "http: //host/dir/file.php"

Questions connexes