2010-04-30 8 views
1

J'ai deux problèmes qui sont liés.Arrêter et démarrer Apache en utilisant PHP (!)

1) J'ai un fichier de commandes qui contient ceci:

net stop wampapache 
net start wampapache 

qui essaie d'arrêter et de démarrer mon serveur WAMP. Lorsque je double-clique sur le fichier stop.bat ci-dessus, cela fonctionne avec succès. Lorsque j'essaie de l'exécuter à partir de mon script PHP, il arrête le serveur mais ne le démarre pas complètement, ce que je devine est parce qu'Apache attend que ce processus PHP se termine?

function php_kill(){ 

    exec('stop.bat', $output = array(), $return); 

    return $return; 

} 

2) Est-il possible de redémarrer mon serveur web (apache) tout en gardant les variables de session qui a besoin PHP disponible?

Merci à tous

+0

Pas sûr mais devinant: si son attente à la fin, ne pourriez-vous pas 'exit ($ retour)' à la fin de votre fonction? ou stocker les vars dans une base de données, dès que vous en avez besoin, vérifiez votre index pour voir si l'entrée spécifique existe. – Glycerine

+0

Je ne sais pas trop, mais je pense que c'est parce que 'exec' attend la fin du processus, mais le processus tue PHP pour que tout soit bloqué! Idée: exécuter 'stop.bat' comme processus d'arrière-plan? – Davide

+0

Davide - c'est une bonne idée, peut-être que je peux ajouter une pause de deux secondes avant d'effectuer l'arrêt/démarrage d'Apache. – Abs

Répondre

1

Le problème est lié au fait que exec attend la fin du processus, mais le processus tue PHP pour que tout se bloque.

Exécution stop.bat comme un processus d'arrière-plan devrait le résoudre. (ici how to run a background process on Windows)

+0

Merci Davide. J'ai fait usage de 'WScript.Shell' - ce n'est qu'une solution Windows et c'est ce dont j'avais besoin. – Abs

3

Le processus PHP est en train de tuer un processus qui, à son tour, tue le processus PHP. C'est comme remonter le temps et assassiner vos parents avant qu'ils ne vous accouchent. Je ne vois pas comment cela peut fonctionner.

On doit se demander pourquoi cette fonctionnalité est nécessaire. Si vous devez le faire de cette façon, vous devriez envisager de planifier un redémarrage du service à partir du script. Je ne sais pas si c'est possible via PHP et Windows.

+0

Je pensais que le script batch s'exécuterait et arrêterait et commencerait apache. J'ai juste besoin que ce script PHP meure dès qu'il a essayé d'être stoppé. Y a-t-il quelque chose qui s'oppose à 'ignore_user_abort' pour un processus?!? – Abs

Questions connexes