2010-10-20 7 views
2

Celui-ci m'a vraiment perplexe. Je n'ai pas rencontré ce problème sur d'autres serveurs sur lesquels j'ai travaillé.Scripts PHP ne répond pas après 120 secondes

Ceci est sur un serveur Ubuntu 10.04.1 LTS avec PHP 5.3.2-1ubuntu4.5.

Lorsque j'ai un script PHP qui n'a aucune sortie pendant plus de 120 secondes, le script n'affichera aucune sortie ultérieure; cependant, toute non-sortie sera toujours exécutée. Cela se produit à la fois pour php5-cgi & php5 (cli). Par exemple:

1. $iSleep = 120; 
2. echo 'Now: '.date('H:i:s')."\n"; 
3. echo 'Sleeping for: '.$iSleep."\n"; 
4. echo 'Will wake up at: '.date('H:i:s', (time()+$iSleep))."\n"; 
5. sleep($iSleep); 
6. echo 'Woke up at: '.date('H:i:s')."\n"; 
7. mail('[email protected]', 'Subject', 'Message'); 

je vais obtenir toutes les sorties à l'écran par la ligne 4. Ligne 6 ne sera jamais apparaître sur l'écran, mais je vais recevoir un courriel de la ligne 7. Si je change la ligne 1 pour être 119 ou moins, le code s'exécutera pleinement comme prévu. S'il vous plaît laissez-moi savoir s'il y a d'autres paramètres (php.ini) ou les numéros de version que vous voulez savoir. Merci d'avance pour votre temps.

Répondre

0

PHP semble répondre correctement lorsque je me connecte à partir d'autres clients. J'ai besoin de comprendre ce qui rend le client que je connecte de différent.

0

Ma réponse est aussi principalement une supposition mais vous avez la variable normale max_execution_time. Par défaut, il s'agit de 30 selon la documentation. Mais un avertissement il mentionne:

La durée d'exécution maximale n'est pas affectée par les appels système, les opérations de flux, etc. Veuillez consulter la fonction set_time_limit() pour plus de détails.

Je suis positif mail() est un appel système, donc vous voulez utiliser set_time_limit comme décrit.

J'espère que cela résout votre problème.

+0

C'étaient mes deux principaux suspects lorsque le problème est apparu pour la première fois, mais l'ajustement des deux n'a pas aidé. – Daniel

+0

Mon php.ini a actuellement max_execution_time = 0 et le script lui-même a set_time_limit (0); – Daniel

+0

Avez-vous essayé d'y ajouter quelques appels flush()/ob_flush()? Pourrait être pris dans Apache quelque part –

Questions connexes