Newsgroup: it.comp.www.php
Titolo: Problema con fsockopen

Ciao a tutti,
la riga centrale:
                  if (!$from_cache || ($from_cache && ($sstatus != "OK"))) {
                     $fp = fsockopen($ip, $port, &$errno, &$errstr, 
$timeout);
                   }
mi genera il seguente errore:
Warning: fsockopen() [function.fsockopen]: unable to connect to [INDIRIZZO 
IP]:80 (Connection refused) in [PERCORSO] on line [NUMERO LINEA]
quando eseguo lo script in remoto, in locale invece tutto funziona 
regolarmente, come posso rimediare al problema?
Grazie in anticipo.
Cooper.
-- 
www.blueware.it
www.italchat.it
 

regolarmente, come posso rimediare al problema?
L'indirizzo che usi e' routabile? Oppure e' 127.0.0.1, 10.*, 192.168*,
169.254.* o simili?
C'e' mica un firewall che blocca la porta 80?
Leonardo
-- 
Geordie - he's a man, there's little doot about't,
He's done all he can, wha' can do withoot't?
Doon there cam a blade, linkin' like me lordie,
He wad drive a trade, a' the loom of Geordie.


Sono delle domande a cui non so risponderti, comq penso di si, trattandosi 
di un server virtuale, è un problema che posso risolvere da solo?
Grazie in anticipo per la risposta.
Cooper.
-- 
www.blueware.it
www.italchat.it
 

di un server virtuale, è un problema che posso risolvere da solo?
Ho paura di no. Se ho capito bene, tu da casa tua (A) riesci a connetterti
alla porta 80, dell'indirizzo B; ma lo stesso codice sul server virtuale C
non funziona. B e' un indirizzo esterno di un server, tipo 
www.google.com
.
Se e' cosi', la causa *quasi* sicura e' che il virtual server non consente
connessioni uscenti, o non le consente sulla porta 80. Forse perche' cosi'
i responsabili si evitano alcune grane (proxy, redirector, cazzabubboli) o
forse perche' te lo fanno solo "a pago".
In entrambi i casi, da solo non ci puoi fare nulla.



Mah non credo che il problema sia questo, trattandosi di un server virtuale 
(che ovviamente pago in modo consistente e non a livello di 10-15 euro, ma 
10 volte di più).
Alla fine in termini di sicurezza non cambia nulla, e in un server vitrtuale 
a differenza di quello dedicato, hai pieno controllo delle applicazioni in 
esso installato, con l'unica differenza che le risorse hardware sono 
condivise con altri utenti (abbattendo cosi i costi di banda, traffico, 
manutenzione etc, presenti in un server dedicato).
In sostanza quindi credo sia più plausibile la prima ipotesi, quella di un 
firewall, in questo caso, dovrei chiedere a loro di correggere il firewall.
Anche perchè, in un server virtuale precedente, usavo lo stesso script con 
fsockopen e non mi dava problemi, ma stanno sorgendo adesso con questo nuovo 
preso da pochi giorni, e quindi adduco la causa a una impostazione errata o 
comunque fatta male.
Non mi resta a questo punto che far intervenire i tecnici a livello di root, 
se a livello di admin non ho i permessi per intervenire.
Una domanda mi viene spontanea, avendo il pieno controllo del software, 
implicitamente avrei controllo anche sul firewall come admin? io non lo so, 
ma in caso affermativo (e mi rendo conto di andare ot con la domanda) potrei 
risolvere direttamente io tramite accesso ssh al server?
Grazie ancora, per la disponibilità
Cooper.
-- 
www.blueware.it
www.italchat.it
 

risolvere direttamente io tramite accesso ssh al server?
In teoria potrebbe darsi; dipende da dov'e' il firewall e da altre cose
(es. se ce n'e' uno solo, o se ci sono gli script per configurarlo).
Ma bisogna che tu senta il provider.


 quando eseguo lo script in remoto, in locale invece tutto funziona 
Per "eseguire in remoto" intendi che $ip ha un valore diverso dal quello 
della macchina su cui gira il server web?
Visto che hai un server virtuale puoi guardare i log di sistema e di 
apache per avere qualche aiuto ?


si posso farlo, ma cosa dovrei cercare in particolare?
Cooper.
-- 
www.blueware.it
www.italchat.it
 

 si posso farlo, ma cosa dovrei cercare in particolare?
Qualche problema nei log di apache o in messages.


Mi puoi dare qualche info piu precisa?
Cooper.
-- 
www.blueware.it
www.italchat.it
 

 Mi puoi dare qualche info piu precisa?
No perché non ho idea di che sistema sia.


Non č questo che mi interessa perň. Non devo collegarmi da nessuna parte, č 
lo script installato sul server virtuale con IP xxx.xxx.xxx.xxx a usare 
fsocksopen () sulla porta 80 e ottiene una "connection refused" ovvero 
fallisce il tentativo di connessione, ma sempre lo script dal server 
virtuale verso l'esterno.
In locale invece, tutto funziona correttamente, non mi da errori etc. Per 
questo ritengo che il problema non vada ricercato nel php ne in apache ma in 
qualche firewall che blocca le connessioni esterne, o comunque le 
connessioni alla porta 80 dall'interno verso l'esterno.
Cooper.
-- 
www.blueware.it
www.italchat.it
 


Procedendo con un confronto tramite phpinfo locale e quello remoto ho 
osservato che la variabile: HOSTNAME:PORT del modulo: APACHE2HANDLER è 
settata come [nomedominio]:80 (per quello locale) mentre:   [nomedominio]:0 
per quello remoto.
E' possibile che l'errore sia dovuto proprio a questo? In caso affermativo 
quale file dovrei andare ad aprire per correggere questa variabile?
Sicuramente chi avrà installato php nel server virtuale distrattamente ha 
sbagliato a scrivere 80 e ha scritto 0, sempre che di errore si tratti.
Rimango in attesa di risposta.
Grazie ancora,
Cooper.
-- 
www.blueware.it
www.italchat.it
 

E' possibile che l'errore sia dovuto proprio a questo?
Non credo.



Non ricordo A,B, C per cosa stavano, cmq posto che:
(Server locale) => phpinfo()  => APACHE2HANDLER => HOSTNAME:PORT => 
localhost:80
(Server Remoto) => phpinfo()  => APACHE2HANDLER => HOSTNAME:PORT => 
[nomedominio]:0
Inoltre su httpd.conf, sostituendo listen ip:8080 con listen ip:80 mi da 
errore (13) dicendo sostanzialmente che non riesce a fare il binding etc etc 
sulla porta e manda in shutdown apache.
Idee?
Cooper.
-- 
www.blueware.it
www.italchat.it
 

[nomedominio]:0
Abbi pazienza, ma io ho fatto un tale casino con gli indirizzi che non mi
ci raccapezzo piu'.
Facciamo cosi'... hai tre macchine, quindi al massimo hai tre indirizzi.
Se non vuoi renderli noti, inventati tre indirizzi a caso e scriviteli su
un foglietto accanto a quelli veri. Poi mi dai quelli falsi. Cosi' almeno
ragioniamo su dei numeri fissi, sempre gli stessi.
In questo momento per dire non so se "server locale" s'intende l'host che
hai in casa per le prove o l'host virtuale, e se con "server remoto" stai
riferendoti all'host virtuale, oppure alla terza macchina, quella da dove
sia la macchina di prova che quella di produzione prelevano pagine usando
fsockopen.
E non lo voglio nemmeno sapere! Voglio tre indirizzi numerici :-)
Leonardo che ha gia' perso la strada per tornare a casa



Allora a questo punto facciamo cosi, ti dico gli indirizzi reali, avevo 
omesso per evitare un caso di spamming.
Sintetizzando nel mio computer di casa e di lavoro (locale) tutto funziona 
correttamente, il problema si presenta in quello remoto (ovvero dove viene 
ospitato il sito internet.
Il sito internet in questione è il secondo in firma e più precisamente, il 
problema che ho descritto è quello di cui alla seguente pagina:
http://www.italchat.it/servizi/submit.php
se vai in basso in corrispondenza di url e scrivi un indirizzo internet 
valido e completo in ogni sua parte ad esempio: 
http://www.italchat.it/home.php
 e clicchi su INVIA, osserverai che nella 
procedura di validazione viene richiamato lo script urlvalidator, di cui il 
warning alla riga 76 che è quella in cui viene richiamata la funzione 
fsockopen.
Cosi andiamo al sicuro, e non possiamo sbagliare.
Grazie ancora per la pazienza.
Cooper.
-- 
www.blueware.it
www.italchat.it
 

 Cosi andiamo al sicuro, e non possiamo sbagliare.
Infatti anche io non ci capivo più nulla con locale, remoto e ip 
mascherati.
Siccome è un warning e l'esecuzione prosegue perché non stampi anche 
$errstr e $errno ?

 ha scritto nel messaggio 
news:suppanews-64657...@26-96-177-194.serverdedicati.seflow.net...

Allora ecco tutti i parametri in seguito riportati:
ip => 80.241.163.13
port => 80
errno => 111
errstr => Connection refused
timeout => 30
Qualche soluzione?


 Qualche soluzione?
Secondo il manuale php $errstr riflette l'errore della connect() di 
sistema. 
Non so che sistema usi tu, ho controllato la connect di linux 2.4 e 
trovo:
ECONNREFUSED
              No one listening on the remote address.
Può essere questo il problema ?
Hai provato a fare la prova del nove con un telnet sulla porta 80 ad un 
terzo server web ?


prova a vedere se ti funziona

 prova a vedere se ti funziona
I consigli sulla fsockopen sono successivi all'apertura della socket 
(parlano delle richieste in http 1.0 e 1.1) mentre in questo caso il 
problema è che non viene aperta la socket, quindi un passo indietro 
rispetto a quello.
file_get_content() può aggirare il problema secondo la necessità di 
voler mandare o meni dei dati in POST, in questo caso si potrebbero 
mandare in GET.
Non immaginavo invece che fopen() ammettesse come argomento un url http, 
chissà se permette anche la scrittura.


Non riesce a collegarsi, però in httpd.conf hanno settato listen in 8080, 
per cui credo che dopo una lunga dormita di aver trovato la soluzione, e 
cioè sostituire il $port = 80; con $port = 8080; incrociando le dita e 
sperando che vada.
Ma port 80 cmq non è quella usata per il web? la 8080 a che serve? è la 
stessa della 80 come funzionalità? settando listen 80 apache va in crash 
dicendo che non riesce a fare il binding e compagnia bella (insomma quello 
che avevo detto in un post precedente ieri).


 
non saprei... in realtà a me sembra lo stesso errore,
"Yoko" segnala un errore 111 Connection refused sulla fsockopen e nel
primo post si vede che utilizza @ per sopprimere il warning
comunque oggi non c'è verso di svegliarsi per bene... quindi non mi
stupirei di aver letto una cosa per un'altra :-D

 Ma port 80 cmq non è quella usata per il web? la 8080 a che serve? 
Cerca in /etc/services .

Qualche soluzione?
A me si apre (Apache su Fedora). Ne deduco che, come ti dicevo, il
problema e' sulla macchina remota, quella dove gira fsockopen.
Evidentemente, le connessioni USCENTI sulla porta 80 vengono tolte
di mezzo da un firewall o sulla macchina medesima oppure sulla sua
rete.
In pratica (font Courier)
     |---------------------[FW]--->|
Casa |                   .........>| :80 Blueware
     |--------------+    .   +---->|
                    |    .   |
               |<---+    .   +-----|
Server Virtuale|---> (STOP)        | Resto del mondo
               |<------------------|
...la connessione sulla porta 80 entrante di Blueware e' bloccata,
con ogni evidenza prima che esca dalla pertinenza del virt-serv.
Leonardo
