Newsgroup: it.comp.www.php
Titolo: Leggere online i contenuti di un file csv su directory protetta

Come da oggetto mi sto incasinando su questa cosa.
Sinceramente non so bene a quale funzione � meglio ricorrere per un
aggiornamento automatico di un Db.
Spiego i dettagli:
su un server ftp risiede questo csv di aggiornamento, la directory in
cui risiede � assegnata al mio account e se uso un client ftp vi accedo
direttamente usando le mie credenziali.
Questa operazione sarebbe da fare una volta al gionro, quindi non �
molto esosa in termini di risorse. Il file � circa di 2Mb.
 
Leggendo in rete invece che capire cosa usare mi sono confuso ancora di
pi� le idee...
ftp_gets()?
curl()?
fgets?
 
Ho trovato una marea di esempi, ma ogni volta che ne ho approfondito uno
mi sono capitati altri esempi che facevano uso di una funzione diversa,
insomma, non ci capisco pi� 'na mazza...
 
Mi date una spazzolata mentale per favore? 
 
Grazie
 
Max
-- 
http://www.maxori.it
 
L'Arte � la capacit� di fare cose di nessun valore
e di riuscire a venderle
F. Zappa

 
 
l'unico che non hai detto :)
 
http://php.net/manual/en/function.fgetcsv.php
 

 
http://php.net/manual/en/function.fgetcsv.php
 
 
No, in realtà avevo visto anche quello, solo che mi sono dimenticato di
scriverlo... ;)
 
Quindi mi confermi che è la funzione più adatta per collegarsi tramite
user e pw ad un server ftp e leggere (o salvare in un altro file) i
contenuti di un csv?
 
Intanto grazie... la mia testa ha già smesso di fumare.
 
Attualmente sono riuscito a fare qualcosa con questo script:
 
$handle = @fopen("
ftp://user:p...@ftp.server.com/file.csv
", "r");
if ($handle) {
  while (($buffer = fgets($handle, 4096)) !== false) {
    $data .= $buffer;
  }
  $fp = fopen('new.csv', 'w');
  fwrite($fp, $data);
  fclose($fp);
}
 
 
Ma spesso il server mi va in timeout, credi che sia colpa dello script?
 
Max
-- 
http://www.maxori.it
 
L'Arte è la capacità di fare cose di nessun valore


fgets?
 
Ti servono i fopen_wrappers (fopen("ftp://...")) o curl per PRENDERE il file,
poi fgetcsv o parse_csv per prendere una riga ed estrarne i campi. Cosa farci
dopo, non lo so: se lo butti in un DB, PDO is your friend.
 
Leonardo
 
-- 
 
Then felt I like some watcher of the skies, when a new planet swims into his ken;
Or like stout Cortez when with eagle eyes, he star'd at the Pacific; and all his men
Look'd at each other with a wild surmise - silent, upon a peak in Darien.

 Leonardo
 
Grazie Leonardo.
fopen_wrappers mi mancava... guarderò anche quello (sigh!)
 
Max

Ma spesso il server mi va in timeout, credi che sia colpa dello script?
 
*Dovrebbe* essere colpa dell'FTP.


 	}
 
Perché complicarsi la vita? :)
 
Dato
 
$tempfilename = tempnam();
 
per creare un nome temporaneo quasi immune a race conditions, prova 
semplicemente:
 
copy('ftp://...', $tempfilename);
 
DOVREBBE (condizionale perché non ho verificato) sfruttare 
automaticamente le proprietà degli stream di bufferizzare e "fare 
stream" (copiare un pezzo alla volta senza saturare la RAM).
 
Se non lo fa, prova con
 
$suftp = fopen('ftp://...', 'r');
$locale = fopen($tempfilename, 'w');
stream_copy_to_stream($suftp, $locale);
 
Alla peggio, ma non so se bufferizza:
 
file_put_contents( $tempfilename, file_get_contents('ftp://...'));
 
Se nessuno bufferizza, usa la soluzione di Leonardo.
 
Bye.

file_put_contents( $tempfilename, file_get_contents('ftp://...'));
 
Eh, questa mi sa di no. copy() pero' e' una figata, mica ci avevo pensato.


Grazie a tutti voi per l'aiuto.
Sono riuscito a far funzionare il tutto. 
 
A buon rendere, anche se non so come però...
