Newsgroup: it.comp.www.php
Titolo: [ftp] Cannot build data connection

Salve a tutti...
Sto cercando di connettermi ad un mio server ftp esterno (ora sono su un
sito con aruba) per rinominare dei files e limitare gli accessi non voluti.
In poche parole voglio che i files passino per uno script già esistente nel
mio spazio, vengano loggati e poi ridirezionati sul server esterno.
Mi spiego: il link
http://www.jidesk.net/miofile.avi
in realtà non è un file ma una directory, che contiene un file asp (l'avevo
fatto tempo fa lavorando su un altro script, appena posso lo faccio in php)
il quale scrive su un file data ed ora della richiesta, l'agent (browser o
download manager) ed il referrer, che è quello che mi interessa di più, in
questo modo posso loggare ciò che mi interessa senza usare le statistiche
del server (che costano di più ^___^).
Una volta scritto, chiude il file e fa il redirect sul file vero, che è, per
esempio:
http://www.altroserver.com/maub/miofile.avi
Ciò che volevo fare era evitare che qualcuno s'accorgesse della posizione
reale del mio file, rinominando ogni tot (o ad ogni accesso sul mio sito) la
directory di collocazione.
Per fare questo devo accedere al sito via ftp, visto che lo spazio che ho su
questo sito secondario non supporta pagine dinamiche, cgi e simili (così
costa meno).
Sto cominciando a scrivere uno script in php per accedere con fsockopen al
sito (per ora al mio, giusto per testare), eccolo:
[ovviamente userid e password non sono questi ;-P]
----------------------
<?php
$connection = fsockopen ('
ftp.jidesk.net
',
21,
&$errorNumber,
&$errorString,
10);
$header = "USER userid \r\n";
$header .= "PASS password \r\n";
$header .= "SYST \r\n";
$header .= "CWD /
jidesk.net/\r\n
";
$header .= "LIST\r\n";
if ($connection) {
echo "Figata!\n";
fputs($connection, $header . $request);
while (!feof($connection))
echo fgets($connection, 128);
fclose ($connection);
} else {
echo "errore!\n";
}
echo "<br><br>$errorNumber<br>$errorString";
?>
----------------------
Allora, essendo in testing vedrete il browser cominciare a caricare e poi
mettersi in attesa. Interrompete pure e guardate l'ouput fornito
(visualizzando l'html):
220 Aruba FTP Server
331 Password required for 
105...@aruba.it
.
230 User 
105...@aruba.it
 logged in.
215 UNIX Type: L8
250 CWD command successful. "/
jidesk.net
" is current directory.
451 Failed: Cannot build data connection..
Il problema è l'errore finale, che appare quando faccio il LIST.
Ora ho modificato un po' il mio codice in modo che chiuda la connessione se
riceve questo errore. Lo trovate qui:
http://www.jidesk.net/test/connection_remote.php
Ho provato a vedere in giro a cosa può essere dovuto questo errore ed alcuni
pensano sia dovuto ad un firewall presente nel server, ma non penso (se no
dubito che si connetterebbe). Io credo che invece sia dovuto al fatto che
non riesce ad inviare l'output della lista.
Ora, non che mi serva il list, però vorrei capire a cosa è dovuto questo
errore.
Cmq per rinominare il file o la directory credo che non ci siano
assolutamente problemi, giusto?
Grazie per l'attenzione e scusate il disordine :-)
--
ciauz
Maurizio Berti
maur...@jidesk.net
 - 
http://www.jidesk.net/
ICQ: 21686278
-------------------------------
"Non capirò mai la capacità femminile di evitare
una risposta diretta a qualsiasi domanda" - Spock

errore.
Non e' impostata la modalita' PASsiVe.
Leonardo
-- 
Nior thainig ar major i dtus an lae chugainn,
is ni rabhamar fein ann i gcoir na gceart
ach mar sheolfai aoireacht bo gan aoire,
ar thaobh na greine de Sliabh na mBan.

 Non e' impostata la modalita' PASsiVe.
Cioè? Cosa comporta? Non posso ricevere l'output della lista? Come posso
ovviare a questo problema?
Grazie mille!


Cioč? Cosa comporta? Non posso ricevere l'output della lista? 
Non puoi ricevere NULLA - neanche un file .gif - a meno che tu riesca ad
impostare la modalita' di scambio passivo. Con ftp a linea di comando si
fa con il comando MODE PASSIVE oppure PASV. Con PHP... boh.


 comando si fa con il comando MODE PASSIVE oppure PASV. Con PHP... boh.
Estratto dal manuale:
ftp_pasv
(PHP 3>= 3.0.13, PHP 4 >= 4.0b4)
ftp_pasv -- Abilita o disabilita la modalita` passiva.
Descrizione
int ftp_pasv (int ftp_stream, int pasv)
Restituisce vero se a buon fine, falso in caso di errore.
ftp_pasv() abilita la modalita` passiva se il parametro pasv e` vero 
(disabilita il modo passivo se il parametropasv e` falso.) Con la 
modalita` passiva abilitata, la connessione viene iniziata dal client, 
anziche` dal server.
-- 
Mariani "Darkpand" Dario 
dark...@libero.it
IAFo #126       ICQ# 49365960
"L'uomo e' tanto meno se' stesso quanto piu' parla in persona propria:
dategli una maschera e vi dira' la verita'" -- Oscar Wilde

 Estratto dal manuale:
<cut>
Grazie!
--
ciauz
Maurizio Berti
maur...@jidesk.net
 - 
http://www.jidesk.net/
Movie trailers: 
http://www.jidesk.net/trailers
ICQ: 21686278
-------------------------------
"Non caparò mia li capucatà femminalo di avutera
ine rispesti diretta i qaalsaisa dominda" - Spock