Je rencontre un problème avec PHP et/ou Apache en utilisant la fonction system().
Mon but est de lancer des pings vers un hôte et que le résultat de ces pings soient affichés en temps réel pour les utilisateurs.
Mon problème est que la fonction system() bloque l'accès au reste du site web au sein du navigateur (dans un nouvel onglet par exemple) tant que l'exécution de la commande n'est pas fini. l'accès depuis un autre navigateur depuis le même poste reste possible.
Voici un exemple du code PHP :
$cmd="ping -s 1024 -c 100 127.0.0.1 &";
system($cmd);
Je suis sous Debian Lenny avec les paquets suivants :
~$ dpkg -l *php* | grep "^ii"
ii libapache2-mod-php5 5.2.6.dfsg.1-1+lenny8 server-side, HTML-embedded scripting languag
ii php5-common 5.2.6.dfsg.1-1+lenny8 Common files for packages built from the php
~$ dpkg -l *apach* | grep "^ii"
ii apache2 2.2.9-10+lenny8 Apache HTTP Server metapackage
ii apache2-doc 2.2.9-10+lenny8 Apache HTTP Server documentation
ii apache2-mpm-prefork 2.2.9-10+lenny8 Apache HTTP Server - traditional non-threade
ii apache2-utils 2.2.9-10+lenny8 utility programs for webservers
ii apache2.2-common 2.2.9-10+lenny8 Apache HTTP Server common files
ii libapache2-mod-perl2 2.0.4-5+lenny1 Integration of perl with the Apache2 web ser
ii libapache2-mod-php5 5.2.6.dfsg.1-1+lenny8 server-side, HTML-embedded scripting languag
ii libapache2-mod-python 3.3.1-7 Python-embedding module for Apache 2
# SESSION ?
Posté par zedS . Évalué à 4.
Il faut utiliser la fonction session_write_close() des que tu n'as plus besoin de la session sur la première page, la deuxième pour alors s'exécuter.
ps (vie ma vie) : solution que j'ai découvert tout récemment et très difficile à trouver sur le net (va savoir si c'est apache, php, le navigateur ou autre chose qui coince)
[^] # Re: SESSION ?
Posté par mekare . Évalué à 3.
Je viens de tester et ça a l'air de fonctionner :
$cmd="ping -s 1024 -c 100 127.0.0.1 &";
session_write_close();
system($cmd);
MERCI beaucoup.
[^] # Re: SESSION ?
Posté par zedS . Évalué à 2.
Les données de session sont généralement stockées à la fin de votre script, automatiquement, sans besoin d'appeler explicitement session_write_close(). Mais durant toute l'exécution du script, les données de session sont verrouillées en écriture, et un seul script peut opérer sur la session en même temps. Lorsque vous utilisez des frames avec des sessions, vous vous en rendrez compte en voyant les frames se rafraîchir les uns après les autres. Vous pouvez réduire le temps de calcul de ces pages en refermant la session aussitôt que possible, ce qui libère les données pour les autres scripts.
http://fr2.php.net/manual/fr/function.session-write-close.ph(...)
[^] # Re: SESSION ?
Posté par stopspam . Évalué à 2.
[^] # Re: SESSION ?
Posté par NeoX . Évalué à 2.
[^] # Re: SESSION ?
Posté par ze_lionix (site web personnel) . Évalué à 2.
Et tant qu'à faire autant tester sur le loopback qui a tendance à répondre tout le temps _ s'il est monté...
Fuse : j'en Use et Abuse !
[^] # Re: SESSION ?
Posté par mekare . Évalué à 1.
Le but réel est d'effectuer des pings vers divers hôtes pour aider au diagnostic lors de problèmes réseaux.
En tout cas, la solution proposée fonctionne.
Ma vie : Moi qui ne suis pas dev, ce n'était pas évident de trouver et comprendre ce genre de problème, merci encore à Zeds.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.