problema con socket

aleocel

Nuovo Utente
17 Ago 2006
26
0
1
i socket non mi funzionano Su windows ho installato wampserver2 ed ho provato fsockopen, ma mi dà questo errore:

Warning: fsockopen() [function.fsockopen]: unable to connect to http://dizionari.corriere.it/dizion...iano/a.shtml:80 (Unable to find the socket transport "http" - did you forget to enable it when you configured PHP?) in C:\wamp\www\dizionario\scaricaDizionario.php on line 15
Unable to find the socket transport "http" - did you forget to enable it when you configured PHP? (32)

Ho provato col decommentare le righe relative ai socket in php.ini, ma l'errore viene fuori lo stesso. Potrei aver sbagliato la porta (80)? Grazie, raga.
 
Potresti cortesemente postare parizlamnete il codice così magari qualcuno ha la possibilità di aiutarti concretamente.

Ciao, Ciro
 
questo è il codice

$link='http://dizionari.corriere.it/dizionario_italiano/a.shtml';
$fp = fsockopen ($link, 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br>\n";
} else {
fputs ($fp, "GET / HTTP/1.0\r\nHost: $link\r\n\r\n");
while (!feof($fp)) {
echo fgets ($fp,128);
}
fclose ($fp);

Dopo aver decommentato le righe relative ai socket nel file di configurazione hai riavviato Apache?

si ho riavviato Apache ed anche Iexplorer
 
Leva il http:// dalla stringa del link e poi dimmi se hai risolto ;)

Fatto! Tolto hhtp:// funziona, grazie mille. Ora però mi dà questo errore:

HTTP/1.1 400 Bad Request Date: Thu, 02 Sep 2010 14:58:19 GMT Server: Apache Content-Length: 226 Connection: close Content-Type: text/html; charset=iso-8859-1
Bad Request
Your browser sent a request that this server could not understand.

significa che non ho i permessi ? oppure che il time out è troppo basso? volevo solo scaricare il codice html...

stai cercando di accedere da locale ad un file in remoto?

si, volevo scaricare il codice html, appunto. Il server web è in locale, (127.0.0.1 localhost), però sono collegato ad internet, perché? (scusa l'ignoranza)
 
Ultima modifica:
No semplicemente significa che quell'host una richiesta così non la accetta.
Prova a levare la righa Host: $link
fa che la richista sia solo questa: "GET /\n\n\n\n" Prova così.
 
Qui più che di PHP parliamo di RFC!!!!

Allora vediamo un attimo:

La richiesta HTTP corretta per scaricare la risorsa:
http://dizionari.corriere.it/dizionario_italiano/a.shtml

è questa:

Codice:
GET /dizionario_italiano/a.shtml HTTP/1.1
Host: dizionari.corriere.it

Usare la versione 1.0 del protocollo HTTP non può funzionare perchè non implementa l'header Host. Senza specificare questo header nella richiesta il web server andrà ad utilizzare la configurazione del suo VirtualHost di default, che in questo caso è diversa da quella relativa a dizionario.corriere.it.
In pratica è come se al posto del dominio usassi l'IP corrispondente
( http://194.20.158.117/dizionario_italiano/a.shtml ).

Ma poi, perchè complicare le cose usando i socket invece di usare:

PHP:
$page = file_get_contents('http://dizionari.corriere.it/dizionario_italiano/a.shtml');
echo $page;
 
Trogo, non tutti i server hanno la direttiva allow_url_fopen impostata su on, quindi forse è per questo che ha scelto di usare i socket. Comunque, nel caso fosse abilitata, direi che con file_get_contents sarebbe tutto molto più facile. Puoi controllare se è abilitata vedendo l'output di una pagina PHP con all'interno:
PHP:
<?php
echo ini_get('allow_url_fopen');
?>
Se restituisce on o 1 allora sei a cavallo!
 
Qui più che di PHP parliamo di RFC!!!!

Ma poi, perchè complicare le cose usando i socket invece di usare:

PHP:
$page = file_get_contents('http://dizionari.corriere.it/dizionario_italiano/a.shtml');
echo $page;

Scusate, mi era sfuggito, ho il php arrugginito...:crying: GRAZIE.GRAZIE.GRAZIE.
 
Peccato però che con i socket sia riuscito a collegarmi, nonostante abbia provato i suggerimenti di nessuno1 e Trogo, ormai era una questione di principio! E COMUNQUE GRAZIE.
 
Peccato però che con i socket sia riuscito a collegarmi, nonostante abbia provato i suggerimenti di nessuno1 e Trogo, ormai era una questione di principio! E COMUNQUE GRAZIE.

Giusto poi per completezza, questo codice l'ho testato e funziona:

PHP:
$host = 'dizionari.corriere.it';
$uri = '/dizionario_italiano/a.shtml';
$fp = fsockopen ($host, 80, $errno, $errstr, 30);
if (!$fp) {
	echo "$errstr ($errno)<br>\n";
} else {
	fputs ($fp, "GET $uri HTTP/1.1\r\nHost: $host\r\n\r\n");
	while (!feof($fp)) {
		echo fgets ($fp,128);
	}
	fclose ($fp);
}

Ovviamente, usando i socket e una richiesta a basso livello, quello che ritorna è tutta la risposta, quindi comprensiva di header, e non solo il codice html della pagina.
 

Discussioni simili