Newsgroup: it.comp.www.php
Titolo: 2 fopen aperte e tempo di attesa di 78 secondi

Ciao a tutti...
Premetto che sono un niubbo di php, ma documentandomi qua e la sono
riuscito a fare un bloco per phpnuke che funziona... almeno in parte :)
il bloccho in questione preleva dei dati da 2 pagine diverse di
counter.li.org
 e li riscostruisce nel suddetto blocco.
La prima interrogazione (fopen) č per la pagina principale del sito e
con una regexp stupida, prende i dati dove si parla di utenti registrati
e macchine registrate mentre la seconda *passa attraverso una CGI* che
punta attraverso un codice utente a un'altra pagina con le informazioni
personali di un utente di 
counter.li
.
Quest'ultima fopen appunto almeno dal mio server ci impiega in media 78
secondi per essere processata.
Non č che per caso la cgi attenda qualche header tipo user-agent (o come
diavolo si chiama..) e non ottendola vada in timeout dopo un certo
numero di secondi? 
Se fosse cosě il php permette di mandare questo header ma proprio  non
so come si fa... ho trovato poca documentazione per fare questa cosa.
Attraverso un trace del browser testuale lynx, ho visto che *forse*
li.counter.org
 mi spara un cookie e la ragione di tutta questa attesa
sia che non lo posso memorizzare dal lato server?
 
Come faccio a capire cosa si aspetta esattamente la cgi?
Comunque il codice č questo, spero mi vogliate dare una mano per
risolvere questo mistero.
Ciao e auguri per un fantastico 2003
<?php
/***********************************************************************
*/
/* This program is free software. You can redistribute it and/or modify
*/
/* it under the terms of the GNU General Public License as published by
*/
/* the Free Software Foundation; either version 2 of the License.
*/
/***********************************************************************
*/
if (eregi("block-Counter-li.php",$PHP_SELF)) {
    Header("Location: index.php");
    die();
}
# >>>  CHANGE THIS NUMBER TO YOURS <<<
$number = "78792";
$userstat =
"
http://counter.li.org/cgi-bin/runscript/display-person.cgi?user=$number
";
$url = "
http://counter.li.org/
";
$data = "";
$datastat = "";
$version = "0.2";
$processa = @fopen($url,"r");
#sezione globale
  while (!@feof ($processa))
     {
      $data.= @fgets($processa, 4096);
       }
@fclose($processa);
flush();
preg_match( '|there are *?(.*)users registered|sm', $data, $arr);
$utenti = strip_tags(trim($arr[1]));
preg_match('|users registered *?(.*)machines registered|sm', $data,
$arr);
$macchine = strip_tags(trim($arr[1]));
preg_match('|machines registered *?(.*)Get Counted|sm', $data, $arr);
$guess = strip_tags(trim($arr[1]));
#sezione personale
$processastat = @fopen($userstat,"r");
while (!@feof ($processastat))
  {
  $datastat.= @fgets($processastat, 4096);
  }
@fclose($processastat);
preg_match( '|Name: *?(.*)Country|sm', $datastat, $campo);
$nome=strip_tags(trim($campo[1]));
preg_match( '|Country: *?(.*)City|sm', $datastat, $campo);
$stato=strip_tags(trim($campo[1]));
preg_match( '|City: *?(.*)Email|sm', $datastat, $campo);
$citta=strip_tags(trim($campo[1]));
preg_match( '|Started: *?(.*)Usage|sm', $datastat, $campo);
$regon=strip_tags(trim($campo[1]));
#----------- ricostruzione dati ------------
$content .= "<center>";
$content .= "Name: <b>$nome</b>";
$content .= "<br>";
$content .= "<a href=\"$userstat\" target=\"_blank\"><IMG
src=\"
http://counter.li.org/cgi-bin/certificate.cgi/$number\
"
alt=\"certificate\" width=\"100\" height=\"50\" border=\"0\"></a>";
$content .= "<br>";
$content .= "<b>Linux User: $number</b>";
$content .= "<br>";
$content .= "Country: <b>$stato</b>";
$content .= "<br>";
$content .= "City: <b>$citta</b>";
$content .= "<br>";
$content .= "Registered: <b>$regon</b>";
$content .= "<hr width=\"30\" size=\"1\">";
$content .= "<a href=\"
http://counter.li.org
\" target=\"_blank\">Linux
Counter</a> ";
$content .= "<br>";
$content .= "Now, There are...";
$content .= "<br>";
$content .= "Linux Users: <b>$utenti</b>";
$content .= "<br>";
$content .= "Linux Machines: <b>$macchine</b>";
$content .= "<br>";
$content .= "<A href=\"
http://counter.li.org/estimates.php\
"
target=\"_blank\">$guess</a>";
$content .= "<br>";
$content .= "<a href=\"
http://counter.li.org
\" target=\"_blank\"><IMG
src=
http://counter.li.org/smallplot.png
 alt=\"plot\" width=\"100\"
height=\"50\" border=\"0\"></a>" ;
$content .= "<br>";
$content .= "<hr width=\"30\" size=\"1\">";
$content .= "made for phpNuke";
$content .= "<br>";
#   --->>> PLEASE DO NOT REMOVE THE NEXT LINE <<<--------
$content .= "<a
href=\"
http://www.tuttoconlinux.it/modules.php?name=Downloads&d_op=viewd
ownload&cid=1\" target=\"_blank\">by Gabriele Boddi</a>";
$content .= "<br>";
$content .= "Version $version";
$content .= "</center>";
?>
-- 
Per rispondere via email rimuovi nienteconwindows con 
tuttoconlinux.it

 Come faccio a capire cosa si aspetta esattamente la cgi?
Con un sniffer (ad esempio sniffit) sulla tua scheda di rete, oppure
studiando il codice html che invia una richiesta.

sniffit restituisce questo...
GET /cgi-bin/runscript/display-person.cgi?user=78792 HTTP/1.0
Host: 
counter.li.org
Accept: text/html, text/plain, application/msword, text/sgml, image/png,
image/jpeg, image/gif, */*;q=0.01
Accept-Encoding: gzip, compress
Accept-Language: en
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Lynx/2.8.4dev.11 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.6
adesso vedo come spararlo a 
counter.li.org
.. Grazie e buon anno


 adesso vedo come spararlo a 
counter.li.org
.. Grazie e buon anno
in questo caso basta seguente:
<?php
$fp=fopen("
http://counter.li.org/cgi-bin/runscript/display-person.cgi?user=7
8792","r");
while (!feof($fp))
    echo fgets($fp);
fclose($fp);
?>

E' quello che ho fatto cosě:
#sezione personale
$processastat = @fopen($userstat,"r");
while (!@feof ($processastat))
  {
  $datastat.= @fgets($processastat, 4096);
  }
@fclose($processastat);
ma proprio non ne vuol sapere...
Certo che č proprio strano... magari sul server mio dove gira lo script
c'e' una versione di php un po' buggata non so... brancolo nel buio...
ciao..
J


ma proprio non ne vuol sapere...
E, dato che ogni funzione l'hai bloccata con @, ordinando "se succede un
errore, non mi dire nulla -- muori senza spiegarmi il perche'", suppongo
che lo script muoia senza spiegarti il perche'.
Leonardo

 Leonardo
Magari morisse.. fa tutto quello che deve fare solo che si addormenta
per pių di un minuto e solo quando interroga quella cgi .. poi
magicamente sputa fuori tutto quello che deve sputare sulla pagina
html...
Ancora devo provare a mandargli qualche header e vedere che succede...
ciao.
