Garder actif un script php

Eléphant du PHP | 153 Messages

03 mars 2006, 11:51

Salut !

J'ai un script PHP que j'aimerai garder actif (qui continue de s'exécuter quand mon navigateur est fermé).

Le problème est, que quand je lance mon navigateur et que j'accède à la page, le script s'exécute sans problème, mais dès que je ferme la page... pouf ! Le script s'arrête quelques secondes après...

J'ai remarqué que sur la pluspart des serveurs il continue de s'exécuter, pourquoi pas chez moi ?!!!

J'ai Apache2 d'installer sur une Debian. Que dois-je modifier ? J'ai essayé de fouiner dans apache2.conf et j'ai trouvé KeepALive, mais en bidouillant les valeurs j'ai planté le serveur...

Quelqu'un peut-il m'aider :) Merci !!

Olivier.
http://gl2.delcedo.com/ Galaxialord 2 !

Mammouth du PHP | 19672 Messages

03 mars 2006, 11:55

Un script PHP est déclenché par l'appel depuis une page web... ou un gestionnaire de tâches CRON ; Si tu fais un appel depuis une page internet et que tu fermes ton navigateur, un signal est envoyé indiquant que le résultat attendu n'est plus requis, donc l'application s'arrête. Il faut donc faire en sorte que l'appelant attende le résultat sans que tu sois prisonnier du délai d'exécution. C'est donc plus approprié de passer par une tâche CRON ou WebCron.

Il faudrait que tu précises ce que tu veux faire en fin de compte. D'autant que le timeout configuré dans ton php.ini a une certaine importance : par défaut, c'est trente secondes.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 153 Messages

03 mars 2006, 12:03

J'ai bien mis un set_time_limit(0), donc normalement pas de bug à ce niveau là.

Je fais un moteur de recherche d'images en php et j'ai besoin d'un robot qui parcours les pages et indexe les images / mot-clés etc...

Ce robot doit s'exécuter tout seul :)

J'ai déjà pu le tester en laissant mon navigateur ouvert, il n'y a pas d'erreur généré (et de toute manière s'il y en a, le script principal appelé relance l'indexation automatiquement). Le script principal s'appelle relance.php et il s'occupe de tout.

Je ne vois pas l'intérêt d'un cron ? De toute manière le script attendra quand même les acquittements de l'utilisateur (qui est le cron ou mon navigateur) ?

J'ai remarqué que sur OVH ou à mon IUT (pas testé sur d'autres), les scripts continuaient de s'exécuter même si l'utilisateur avait fermé son navigateur. Donc ils n'ont pas utilisé de cron/webcron. Je pense que c'est plutot au niveau configuration. Non ? (dsl si je me trompe ! :oops: )
http://gl2.delcedo.com/ Galaxialord 2 !

Mammouth du PHP | 505 Messages

03 mars 2006, 13:00

Tu devrais voir du coté de la fonction ignore_user_abort()

Eléphant du PHP | 153 Messages

03 mars 2006, 13:41

merci ! je sens que c'est ce que je cherchais. Je vous dirais ca ce soir :)

C'est fou tout ce qu'il y a comme fonctions dans PHP :D (c'est d'ailleurs pour ca que j'adore PHP :))
http://gl2.delcedo.com/ Galaxialord 2 !

Eléphant du PHP | 153 Messages

04 mars 2006, 01:03

Re salut !

C'est exactement ce que je cherchais :), sauf que la fonction ignore_user_abort() ne marchait pas totalement (elle était reconnue mais elle ne modifiait pas l'état d'"arrêt" de la page.

J'ai donc du modifier le php.ini dans lequel j'ai trouvé ce magnifique paragraphe :
; If enabled, the request will be allowed to complete even if the user aborts
; the request. Consider enabling it if executing long request, which may end up
; being interrupted by the user or a browser timing out.
ignore_user_abort = On
Dans lequel j'ai tout de suite décommenté la ligne "ignore_user_abort = On" !

Après redémarrage du serveur j'ai pu remarqué que la fonction ignore_user_abort() me renvoyait bien 1 (au lieu de 0 dans le cas précédent même avec un paramètre de 1).

Mon script ne plante désormais plus dès que je coupe mon navigateur, merci beaucoup à tous !

Pour ceux qui voudrait plus d'infos sur ce sujet, j'ai trouvé ce lien :
http://fr.php.net/manual/fr/features.co ... ndling.php
http://gl2.delcedo.com/ Galaxialord 2 !

ViPHP
fab
ViPHP | 2657 Messages

04 mars 2006, 02:15

euh sinon tu peux lancer directement ton début depuis un terminal :
http://fr.php.net/manual/fr/features.commandline.php
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }