[PHP] FSockopen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

ik controleer files in onze database met een scriptje.

Dat scriptje opent de file via een socked (fsockopen).

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    $fp = fsockopen($urlArray[host], $urlArray[port], &$errnum, &$errstr,5);
    if (!$fp)
    {
      $return = false;
    }
    else
    {
      fputs($fp,"GET $urlArray[path] HTTP/1.0\r\n");
      fputs($fp, "Host: $urlArray[host]\r\n");
      fputs($fp, "Connection: close\r\n\r\n");
      socket_set_timeout($fp,5);

 // en de rest ....

    }


dit werkt allemaal goed,
maar nu heb ik een bestandje staan op

http://203.107.128.108

alleen nu duurt het veel langer dan de 5 sec timeouts die ik instel.

Doe ik hier iets fout??
Of is er een handigere manier om te kijken of het niet te lang duurt?

Acties:
  • 0 Henk 'm!

  • MAZZA
  • Registratie: Januari 2000
  • Laatst online: 17-09 16:30

MAZZA

Barbie is er weer!

--- 203.107.128.108 ping statistics ---
12 packets transmitted, 0 packets received, 100% packet loss

Dat zou maar zo eens kunnen dan? :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ja, dat weet ik.

Maar hoe kan ik ding in PHP opvangen ?

Ik kan natuurlijk ook een ping sturen,
en aan de hand van de output kijken of ik mijn file pointer kan openen.
Is dit een goed idee?

[ Voor 55% gewijzigd door Verwijderd op 11-03-2003 13:32 ]


Acties:
  • 0 Henk 'm!

  • MAZZA
  • Registratie: Januari 2000
  • Laatst online: 17-09 16:30

MAZZA

Barbie is er weer!

Quote uit de manual:
If the call fails, it will return FALSE and if the optional errno and errstr arguments are present they will be set to indicate the actual system level error that occurred in the system-level connect() call. If the value returned in errno is 0 and the function returned FALSE, it is an indication that the error occurred before the connect() call. This is most likely due to a problem initializing the socket. Note that the errno and errstr arguments will always be passed by reference.
Nog een hint: check het example wat bij fsockopen in de manual staat: http://www.php.net/fsockopen

Succes!

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Daar lijkt mijn stukje code toch op??

Alleen duurt het (zoals bij dat IP nummer) heel lang voordat ie false terug geeft.
Als het goed is moet de 5, die ik mee geef, zeggen dat ie naar 5 sec timed out is.

Maarja, het duurt allemaal veeeeeeeel langer.

Acties:
  • 0 Henk 'm!

  • AcXeller
  • Registratie: Mei 2002
  • Niet online
Laat me raden, je hebt php op een 2000 bak draaien ?

Dacht laatst iets gezien te hebben dat die timeout bij windows versies geen nut had, tenzij je echt een van de nieuwste php versies hebt.

Tada:
The timeout parameter was not supported under windows until PHP 4.3.0, previously it was fixed at 30sec.

[ Voor 26% gewijzigd door AcXeller op 11-03-2003 15:42 . Reden: Quote er bij ]

Mijn YouTube kanaal


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
OK, dat zegt dus al weer genoeg.

Als het goed is gaat zaterdag de server over de kop, dus krijgen we weer een nieuwe versie.
Nu draait er 4.0.6

Maar werkt de timeout dan helemaal niet in lagere versies ??

oja, php draai niet onder Windows !!

[ Voor 9% gewijzigd door Verwijderd op 11-03-2003 17:13 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Nu online
Die socket timeout is pas van kracht als de verbinding gemaakt is. De timeout bij het verbinden wordt door het besturingssysteem bepaald en (voor zover ik weet) kun je die in PHP niet aanpassen.

Acties:
  • 0 Henk 'm!

  • AcXeller
  • Registratie: Mei 2002
  • Niet online
Dat geld idd voor socket_set_timeout() maar volgens mij is de timeout die je meegeeft bij fsockopen puur en alleen voor het maken van de connectie.
The optional timeout can be used to set a timeout in seconds for the connect system call.

Opmerking: If you need to set a timeout for reading/writing data over the socket, use socket_set_timeout(), as the timeout parameter to fsockopen() only applies while connecting the socket.
Staat allemaal in de handleiding

[ Voor 54% gewijzigd door AcXeller op 11-03-2003 18:44 ]

Mijn YouTube kanaal


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ja...

ik kan ook lezen.

Heb je er dan ook een oplossing voor ?

Acties:
  • 0 Henk 'm!

  • AcXeller
  • Registratie: Mei 2002
  • Niet online
Nee, heb wel net ff voor je getest maar hier lijkt ie het met redhat 7.3 wel gewoon mee te pakken en ik heb php versie 4.1.2.

Mijn YouTube kanaal


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
nou...
ik los het nu maar ff zo (een klein beetje vies) op:
PHP:
1
$ping = `ping -n -c 1 $host`;

en dan maar ff kijken of ik 0% packet loss heb
Pagina: 1