2010-09-06 15 views
0

function checkServer ($ domaine, $ port = 80) { global $ checkTimeout, $ testServer;ping sur un serveur via un port spécifique (fsockopen) dans php

$status = 0; 

$starttime = microtime(true); 
$file = @fsockopen ($domain, $port, $errno, $errstr, $checkTimeout); 
$stoptime = microtime(true); 

if($file) 
{ 
    fclose($file); 
    $status = ($stoptime - $starttime) * 1000; 
    $status = floor($status); 
} 
else 
{ 
    $testfile = @fsockopen ($testServer, 80, $errno, $errstr, $checkTimeout); 
    if($testfile) 
    { 
     fclose($testfile); 
     $status = -1; 
    } 
    else 
    { 
     $status = -2; 
    } 
} 

return $status; 

}

le testserver est google.sk et checktimeout est de 10 secondes. Cela fonctionne réellement, mais quand j'essaie de l'exécuter en boucle environ 50 fois, et d'autres choses (requêtes mysql et autres choses comme ça), ce n'est pas lent, mais cela provoque 100% de charge de mon CPU jusqu'à la fin du script. C'est un processus apache unique qui rend fou mon cpu ... Donc je voulais vous demander si vous avez des idées à ce sujet. peut-être une astuce comment faire la même chose en python ou bash ou alors sera apprécié.

Merci pour les réponses :)

+3

Ce n'est pas "pinger", c'est un Une attaque par déni de service est probablement en forme de poire car vous aurez une limite de débit sur les paquets SYN et votre script sera bloqué dans I/O WAIT pour votre délai de 10 secondes deux fois. – MattH

+0

ce n'est pas comme ça ... ce sera l'utilisateur qui veut ping sur son serveur ... im pas gona ping aléatoire des serveurs ou alors ... – Kukosk

Répondre

0

Utilisez CURL

ceci est un exemple comment la conversion fsockopen à cURL PHP fsockopen to curl conversion

Bonne chance

+0

bonjour, merci beaucoup pour votre réponse, mais je ne pense pas c'est ce que je cherche, parce que je veux seulement vérifier si un port de quelque serveur est 'ouvert' et s'il y a un service qui fonctionne sur ce port ... le code que j'ai posté fonctionne très bien, et aussi ça va quand je fais dans une boucle pour 200 fois. mais quand j'ajoute un autre code, il commence à drainer beaucoup d'utilisation de cpu. – Kukosk

+0

désolé, quel est ce code que vous ajoutez? –