Eccovi il codice, non ci sono segreti, pensavo fosse meglio circoscrivere il problema alla parte che non va, cioè al fsockopen per adesso...
p.s.: non l'ho implementato io, come già detto l'ho preso da php.html.it
codice:
<head>
</head>
<body>
<?php
/***
SCRIPT complex_post.php
***/
$host="www.sitoesempio.it" ;
$port=80 ;
$timeout=15 ;
$protocol="HTTP/1.1" ;
$br="\r\n" ;
$sk=fsockopen($host,$port,$errnum,$errstr,$timeout) ;
if(!is_resource($sk)){
echo("Connessione fallita: ".$errnum." ".$errstr) ;
}
$req_body="dato1=1&dato2=2&submit=invia" ;
$headers="POST /cartellaesempio/fileesempio.php HTTP/1.1".$br ;
$headers.="Accept: */*".$br ;
$headers.="Referer: http://www.html.it".$br ;
$headers.="Accept-Language: it".$br ;
$headers.="Content-Type: application/x-www-form-urlencoded".$br ;
$headers.="Accept-Encoding: gzip, deflate".$br ;
$headers.="User-Agent: Mozilla/4.0".$br ;
$headers.="Host: www.sitoesempio.it".$br ;
$headers.="Connection: Keep-Alive".$br ;
$headers.="Cache-Control: no-cache".$br ;
$headers.="Content-Length: ".strlen($req_body).$br.$br ;
fputs($sk,$headers.$req_body) ;
$dati="Prova" ;
for ($i=0;$i<100;$i++) {
$dati.= fgets ($sk,2048);
}
fclose($sk) ;
echo($dati) ;
?>
</body>
</html>
cos'ho fatto io? 1.ho tolto un else in modo da spedire i dati anche se la connessione sembra/è fallita (cmq non peggiora le cose)
2.ho messo un for al posto di un while che leggeva fine a fine file. Perché? perché neache sull'unico host da cui NON ho ricevuto: "Connessione fallita", cioè google.it con il while non stampava perché "oltrepassava" il timeout!
cosa non va in quel fsockopen perché provando con www.google.it , google.it , www.tiscali.it , tiscali.it l'unica connesiione NON fallita è stata google.it?
come si fa a conoscere il nome da mettere nell'host per ogni sito (c'è qlc trucco rispetto al nome che compare nella barra di IE, FF,..)? Perché i browser gli si connettono ed il fsockopen no?
GRAZIE