[PHP] Semplice client FTP

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
kelev
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1766
Iscrizione: giovedì 4 settembre 2008, 0:27

[PHP] Semplice client FTP

Messaggio da kelev »

Ecco un piccolo client FTP ..un po bruttino perchè è privo di form e quindi per utilizzarlo bisogna modificare il codice però, dato che è tutto commentato, non dovete avere problemi. Per consigli e/o altro non esitate a chiedere  :)

Codice: Seleziona tutto

<?php
  $host="";  //host
  $connessione=ftp_connect($host);
  $user="";  //username
  $pass="";  //password
  $login=ftp_login($connessione,$user,$pass);
  //login
  if($login) {
    echo "<script>alert('Loggato')</script>";
  }
  else {
    echo "<script>alert('Non Loggato')</script>";
  }
  //upload file
  $file_home="t"; //directory con nome file 
  $file_ftp="";  //nome file ftp
  $upload=ftp_put($connessione,$file_ftp,$file_home,FTP_ASCII); //sostituisci con FTP_BINARY in caso di immagini o zip ecc..
  if($upload) { 
      echo "<script>alert('File caricato con successo')</script>";
  }
  else { 
      echo "<script>alert('Impossibile caricare il file')</script>";
  }
  //crea directory
  $nome_directory="";  //nome directory
  $new_directory=ftp_mkdir($connessione,$nome_directory);
  if($new_directory) {
    echo "<script>alert('Directory creata con successo')</script>";
  }
  else {
    echo "<script>alert('Impossibile creare directory')</script>";
  }
  //rimuovi directory
  $nome_directory2="";  //nome directory
  $del_directory=ftp_rmdir($connessione,$nome_directory2);
  if($del_directory) {
    echo "<script>alert('Directory eliminata con successo')</script>";
  }
  else {
    echo "<script>alert('Impossibile eliminare directory')</script>";
  }
  //rimuovi file
  $nome_del_file="";  //nome file da eliminare
  $del_file=ftp_delete($connessione,$nome_del_file);
  if($del_file) {
    echo "<script>alert('File eliminato con successo')</script>";
  }
  else {
    echo "<script>alert('Impossibile eliminare il file')</script>";
  }
  //rinomina file
  $old_file_name="";  //nome file vecchio
  $new_file_name="";  //nome file nuovo
  $rename_file=ftp_rename($connessione,$old_file_name,$new_file_name);
  if($rename_file) {
    echo "<script>alert('File rinominato con successo')</script>";
  }
  else {
    echo "<script>alert('Impossibile rinominare il file')</script>";
  }
  //chiudo connessione con il server ftp
  ftp_close($connessione);
?>
"E alla fine sei da solo, dove vai, con chi brindi?"
Avatar utente
garak
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1649
Iscrizione: lunedì 13 giugno 2005, 13:37
Desktop: Gnome
Distribuzione: Ubuntu 24.04
Sesso: Maschile
Località: Roma
Contatti:

Re: [PHP] Semplice client FTP

Messaggio da garak »

Non voglio smontarti, ma se vuoi fare qualcosa di veramente utile perché non scrivi una classe?
La separazione tra codice e interfaccia è importante, è un punto di confine tra la programmazione casareccia e quella professionale.
Avatar utente
kelev
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1766
Iscrizione: giovedì 4 settembre 2008, 0:27

Re: [PHP] Semplice client FTP

Messaggio da kelev »

Non e' da molto che studio il php..comunque sseguirò il tuo consiglio ^^
"E alla fine sei da solo, dove vai, con chi brindi?"
novainvicta
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 811
Iscrizione: sabato 6 ottobre 2007, 11:32
Contatti:

Re: [PHP] Semplice client FTP

Messaggio da novainvicta »

la cosa mi interessa, proverò anche io a trasformarla in una funzione formato gigante o in una classe, quando ho finito la posto
Avatar utente
kelev
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1766
Iscrizione: giovedì 4 settembre 2008, 0:27

Re: [PHP] Semplice client FTP

Messaggio da kelev »

Bene..anche io ci provo dopo confrontiamo i lavori :P
"E alla fine sei da solo, dove vai, con chi brindi?"
novainvicta
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 811
Iscrizione: sabato 6 ottobre 2007, 11:32
Contatti:

Re: [PHP] Semplice client FTP

Messaggio da novainvicta »

ho suddiviso tutto in funzioni, ma devo ancora testarle,

in ogni caso vedo che mancano meccanismi come "spostare", "copiare" file o direcotry direttamente sul server remoto e manca la funzione più importante di tutte, ossia la lettura dei file e la "ricognizione" dei file e cartelle
Avatar utente
kelev
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1766
Iscrizione: giovedì 4 settembre 2008, 0:27

Re: [PHP] Semplice client FTP

Messaggio da kelev »

Vedi in giro se trovi qualche guida completa per quanta riguarda questo protocollo in php..forse trovi qualcosa :-\
"E alla fine sei da solo, dove vai, con chi brindi?"
novainvicta
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 811
Iscrizione: sabato 6 ottobre 2007, 11:32
Contatti:

Re: [PHP] Semplice client FTP

Messaggio da novainvicta »

intanto posto una funzione per poter copiare un file dal server locale al server ftp prima che diventa troppo dipendente dalle mie "librerie"

Codice: Seleziona tutto

/*
 * copy a file on a ftp server
 * $host full url (without the ftp)
 * example: www.example.com/
 * $user is he user name
 * $pass is the password
 * $file_home local direcotry
 * example "test.txt"
 * $file_ftp new remote file direcotry
 * example "newname.txt"
 */
function privateFtpWrite($host, $user, $pass, $file_home, $file_ftp){
	$ret=false;
	$connessione=ftp_connect($host);
	if(ftp_login($connessione,$user,$pass)) {
		if(ftp_put($connessione,$file_ftp,$file_home,FTP_BINARY)) { 
			$ret=true;
		}
	}
	ftp_close($connessione);
	return $ret
}
una chiamata della precedente funzione potrebbe essere:

Codice: Seleziona tutto

privateFtpWrite("username.altervista.org", "username", "la password", "favicon.ico", "favicon.ico");
( in pratica copia la piccola icona che mostra il server privato su quello remoto )
ovvio che se qualche server dovesse esplodere o similis non mi assumo responsabilità....  (rotfl)
Ultima modifica di novainvicta il lunedì 15 settembre 2008, 22:38, modificato 1 volta in totale.
Avatar utente
garak
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1649
Iscrizione: lunedì 13 giugno 2005, 13:37
Desktop: Gnome
Distribuzione: Ubuntu 24.04
Sesso: Maschile
Località: Roma
Contatti:

Re: [PHP] Semplice client FTP

Messaggio da garak »

Ecco, faccio un piccolo esempio pratico di ciò di cui parlavo prima: non va bene che una funzione faccia degli echo al suo interno: molto meglio se restituisce un valore (per esempio un booleano false se va male e true se va bene). Ancora meglio sarebbe gestire dei codici di errore con una classe o usare le eccezioni (solo php5, ma spero che nessuno più sia ancora sul 4...)
novainvicta
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 811
Iscrizione: sabato 6 ottobre 2007, 11:32
Contatti:

Re: [PHP] Semplice client FTP

Messaggio da novainvicta »

obiezione interessante, ho apportato le modifiche più la correzione di 2 difetti

colgo l' occasione per notificare la lista completa delle operazioni fattibili con ftp in PHP
Ultima modifica di novainvicta il lunedì 15 settembre 2008, 22:49, modificato 1 volta in totale.
Avatar utente
kelev
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1766
Iscrizione: giovedì 4 settembre 2008, 0:27

Re: [PHP] Semplice client FTP

Messaggio da kelev »

Carina la funzione :)
"E alla fine sei da solo, dove vai, con chi brindi?"
novainvicta
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 811
Iscrizione: sabato 6 ottobre 2007, 11:32
Contatti:

Re: [PHP] Semplice client FTP

Messaggio da novainvicta »

a dire il vero ho fatto tutto ( lettura, scrittura, elenco file, elenco cartelle, cancellazione, rinonimazione esistenza di file e cartelle), mi manca solo la restituzione del MIME/Type del file ( non sono sicuro del fatto che si chiami così ) che non ho il tempo di fare ricerche sul tipo di comando da inviare

ma devo collaudarne la maggior parte, appena avrò fatto la posto, per ora sono circa 400 righe di codice ( commenti inclusi )
Avatar utente
kelev
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1766
Iscrizione: giovedì 4 settembre 2008, 0:27

Re: [PHP] Semplice client FTP

Messaggio da kelev »

Avevo provato anche io a mettere l'opzione dell'elenco delle cartelle però mi stampava un array vuoto nonostante la cartella in questione era piena di file  :-\
"E alla fine sei da solo, dove vai, con chi brindi?"
novainvicta
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 811
Iscrizione: sabato 6 ottobre 2007, 11:32
Contatti:

Re: [PHP] Semplice client FTP

Messaggio da novainvicta »

xajx ha scritto: Avevo provato anche io a mettere l'opzione dell'elenco delle cartelle però mi stampava un array vuoto nonostante la cartella in questione era piena di file  :-\
elenco cartelle... ?

Codice: Seleziona tutto

/*
 * folder list on a ftp server
 * $host full url (without the ftp)
 * example www.example.com/ ( with or without the ftp:// )
 * $user is he user name
 * $pass is the password
 * $dir is the direcotry
 * example: /
 */
function privateFtpFolderList($host, $user, $pass, $dir){
	$host=sanitizeHostFtp($host);
	$dir=urldecode($dir);
	$ret=null;
	if($dir!=""){
		if(right($dir,1)!="/"){
			$dir=$dir."/";
		}
		$connessione=ftp_connect($host);
		if(ftp_login($connessione, $user, $pass)){
			$tmp=ftp_nlist($connessione, $dir);
			$tot=count($tmp);
			for($i=0;$i<$tot;$i++){
				if(ftp_size($connessione, $dir.$tmp[$i])==-1) {
					$ret[]=$tmp[$i];
				}
			}
		}
		ftp_close($connessione);
	}
	return $ret;
}
/*
 * sanitize the direcotry ( remove initial ftp:// )
 * $host is the host name ( with or wothout ftp:// )
 */
function sanitizeHostFtp($host){
	if(left(strtolower($host),6)=="ftp://"){
		$host=right($host, strlen($host)-6);
	}
	return $host;
}
ritorna un array con le cartelle.... (good)
esempio di chiamata:

Codice: Seleziona tutto

$vettore=privateFtpFolderList("username.altervista.org", "username", "la password", "/");
Ultima modifica di novainvicta il mercoledì 17 settembre 2008, 11:29, modificato 1 volta in totale.
Avatar utente
kelev
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1766
Iscrizione: giovedì 4 settembre 2008, 0:27

Re: [PHP] Semplice client FTP

Messaggio da kelev »

Grazie mille  :D
"E alla fine sei da solo, dove vai, con chi brindi?"
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 5 ospiti