Avatar billede dank Nybegynder
24. januar 2004 - 18:32 Der er 5 kommentarer og
1 løsning

hjælp til at gennemskue funktion

Nedenstående funktion har jeg sakset her fra eksperten for noget tid siden. Den kalder en port (socket) og tjekker om den kan komme i forbindelse med porten:

function CheckService($port, $server, $timeout) {
$ch = @fsockopen($server, $port, $errno, $errstr, $timeout);
if ($ch) {
$status[0] = true;
$status[1] = "server online";
@fclose($ch);
}
else {
$status[0] = false;
$status[1] = $errstr;
}
return $status;
return $errstr;
}
function LavPass($len=10) {
return substr(md5(uniqid(mt_rand(), true)),0,$len);
}


Hvis der er forbindelse må ip:port nødvendigvis komme med en eller anden form for response.

Spørgsmål:

Er der en metode til at få returneret denne response som serveren kommer med?
Avatar billede limemedia Nybegynder
24. januar 2004 - 18:47 #1
Hvis du kigger i manualen, er der et godt eksempel der også udskriver fejlen
http://dk.php.net/fsockopen

Ellers, efter du opretter socketen med fsockopen linien og der er forbindelse, kan du læse serverens svar med
$foo = fgets($socket, 4096);

hvor $foo vil indeholde svaret
Avatar billede limemedia Nybegynder
24. januar 2004 - 18:48 #2
var egentligt et svar
Avatar billede limemedia Nybegynder
24. januar 2004 - 18:49 #3
$foo = fgets($ch, 4096);
og lige rigtigt variabel navn - dét kører godt for mig
Avatar billede dank Nybegynder
24. januar 2004 - 19:14 #4
yeps.. så langt så godt :)

Men er der nogen der kan hjælpe mig til at få det indbygget i mit script? Så må jeg hæve point lidt.
Avatar billede tefcke Nybegynder
24. januar 2004 - 19:15 #5
Jeg forstår ikke dette stykke kode:
return $status;
return $errstr;

Den hopper jo ud af funktionen, når den støder på den første return, og den vil på ingen nåde i 1.000 år nå til den anden return. Men det er måske bare mig ;-D
Avatar billede limemedia Nybegynder
24. januar 2004 - 19:28 #6
som du korrekt skriver, vil den anden return sætning aldrig effektueres. jeg kan forestille mig, at den er skrevet som en rest fra noget debug, hvor $errstr har været mere interessant end $status...

bør være noget ala
<?php
    function CheckService($port, $server, $timeout) {
        $ch = @fsockopen($server, $port, $errno, $errstr, $timeout);
        if ($ch) {
            /* Connection made */
            $foo = fgets($ch, 4096);
            fclose($ch);
           
            $status[0] = true;
            $status[1] = 'server online';
            $status['msg'] = $foo;
        } else {
            /* No connection */
            $status[0] = false;
            $status[1] = 'server offline';
            $status['msg'] = $errno.': '.$errstr;
        }
       
        return $status;
    }
?>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester