2010-01-27 9 views

Répondre

1

Cela devrait le faire, testé sur Windows 7 et de travail. Devrait fonctionner sur toutes les saveurs NT:

function testPort($port, $timeout = 5) { 
    if(!fsockopen('127.0.0.1', $port, $errno, $errstr, $timeout)) { 
     exec("shutdown.exe /r"); 
    } 
} 

testPort(8080); 
+0

Cela devrait fonctionner (s'il peut 'exec()'). –

+0

... mais n'oubliez pas de le refermer par la suite si ce script est en boucle à plusieurs reprises! – symcbean

+0

..... mais ne serait-il pas moins intrusif de redémarrer le service concerné? – symcbean

0

Vous pouvez écrire une extension PHP pour le faire. L'extension doit utiliser l'API Windows pour redémarrer la machine car la partie vérification du socket peut être effectuée directement en PHP. Here est une question sur la façon d'écrire des extensions.

InitiateSystemShutdown est la fonction API Win32 que vous pouvez appeler pour effectuer le redémarrage proprement dit.

0

Utilisez les sockets vous devez ouvrir une connexion TCP (socket) vers l'hôte local avec ce port spécifique. Si la connexion est établie, cela signifie que le port est ouvert, sinon (si le délai est dépassé ou rejeté), le port est fermé.

qui est seulement pour les ports TCP

here's a sample code

Pour la partie 'reboot', utilisez exec('shutdown -r');

Questions connexes