Avatar billede Slettet bruger
06. august 2003 - 02:04 Der er 8 kommentarer og
1 løsning

timeout virker ikke på fsockopen()

Jeg bruger fsockopen til at tjekke, om en hjemmeside er oppe. Problemet er, at scriptet kan finde på at bruge 150 sek på at tjekke dette.

Ifølge php.net dokumentationen burde dette script time-out efter 1 sek - men det gør det ikke. Her er hele scriptet:



<?

set_time_limit(900);
$time = time();

$fp = fsockopen ("www.northwindwebhost.com","80",$errorno,$errorstr,"1");
if($fp) {
    fputs ($fp,"GET / HTTP/1.0\r\n");
    socket_set_timeout($fp,1);

    $request .= "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)\r\n";
    $request .= "Host: www.northwindwebhost.com\r\n";
    $request .= "Connection: Close\r\n\r\n";

    fputs ($fp, $request);

    $line = fgets ($fp, 128);

    while (!feof($fp)) {
        $data .= fgets ( $fp, 128 );
    }
    print "Fundet: $data";
}
else {
    print "Fejl";
}

$time2 = time();
$brugt = $time2-$time;
print "<br>Brugt: $brugt sek";

?>
Avatar billede andy Nybegynder
06. august 2003 - 08:50 #1
http://dk.php.net/manual/en/function.stream-set-timeout.php
stream_set_timeout($fp,5);

Sæt den efter din fputs.
Avatar billede Slettet bruger
06. august 2003 - 09:55 #2
Samme problem - den timer ikke ud...
Avatar billede andy Nybegynder
06. august 2003 - 10:06 #3
Doh, kan se du allerede bruger den.

Prøv at ændre
$fp = fsockopen ("www.northwindwebhost.com","80",$errorno,$errorstr,"1");
til
$fp = fsockopen ("www.northwindwebhost.com","80",$errorno,$errorstr,5);

Og fjern socket_set_timeout($fp,1);
Sæt stream_set_timeout($fp,5); efter din fputs ($fp, $request);

Og forresten er du på windoze?
Avatar billede Slettet bruger
06. august 2003 - 10:43 #4
Virker stadig ikke... scriptet stopper først når det bliver færdig, og det kan tage mere end 100 sek.
Avatar billede andy Nybegynder
06. august 2003 - 10:48 #5
er du på windows?
Avatar billede Slettet bruger
06. august 2003 - 11:06 #6
Har testet på både windows og linux...
Avatar billede andy Nybegynder
06. august 2003 - 11:19 #7
ok, jeg har bare selv haft samme problemer på en windows maskine
Avatar billede Slettet bruger
07. august 2003 - 11:56 #8
Ingen løsning :(
Avatar billede andy Nybegynder
07. august 2003 - 18:23 #9
Følgende kode virker på min redhat box med PHP 4.3.2

<?php

set_time_limit(10);
$time = time();

$host = "64.158.168.56";

$fp = fsockopen ($host,80,$errorno,$errorstr,5);
if($fp) {
    $request = "GET / HTTP/1.0\r\n";
    $request .= "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)\r\n";
    $request .= "Host: $host\r\n";
    $request .= "Connection: Close\r\n\r\n";

    fputs ($fp, $request);
    socket_set_timeout($fp,5);
    $data = "";
    while (!feof($fp)) {
        $data .= fgets ( $fp, 128 );
    }
    print "Fundet: $data";
}
else {
    print "Fejl";
}

$time2 = time();
$brugt = $time2-$time;
print "<br>Brugt: $brugt sek";

?>

Producerer:
Warning: fsockopen(): php_hostconnect: connect failed in /path/exp/test.php on line 8

Warning: fsockopen(): unable to connect to 64.158.168.56:80 in /path/exp/test.php on line 8
Fejl
Brugt: 5 sek
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