Pagina 1 di 1

[PHP] Semplice client FTP

Inviato: giovedì 4 settembre 2008, 0:40
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);
?>

Re: [PHP] Semplice client FTP

Inviato: giovedì 4 settembre 2008, 10:13
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.

Re: [PHP] Semplice client FTP

Inviato: giovedì 4 settembre 2008, 12:01
da kelev
Non e' da molto che studio il php..comunque sseguirò il tuo consiglio ^^

Re: [PHP] Semplice client FTP

Inviato: sabato 13 settembre 2008, 23:41
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

Re: [PHP] Semplice client FTP

Inviato: domenica 14 settembre 2008, 14:24
da kelev
Bene..anche io ci provo dopo confrontiamo i lavori :P

Re: [PHP] Semplice client FTP

Inviato: domenica 14 settembre 2008, 19:54
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

Re: [PHP] Semplice client FTP

Inviato: domenica 14 settembre 2008, 20:08
da kelev
Vedi in giro se trovi qualche guida completa per quanta riguarda questo protocollo in php..forse trovi qualcosa :-\

Re: [PHP] Semplice client FTP

Inviato: lunedì 15 settembre 2008, 12:29
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)

Re: [PHP] Semplice client FTP

Inviato: lunedì 15 settembre 2008, 13:49
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...)

Re: [PHP] Semplice client FTP

Inviato: lunedì 15 settembre 2008, 14:08
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

Re: [PHP] Semplice client FTP

Inviato: martedì 16 settembre 2008, 15:47
da kelev
Carina la funzione :)

Re: [PHP] Semplice client FTP

Inviato: martedì 16 settembre 2008, 18:20
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 )

Re: [PHP] Semplice client FTP

Inviato: martedì 16 settembre 2008, 20:41
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  :-\

Re: [PHP] Semplice client FTP

Inviato: martedì 16 settembre 2008, 22:01
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", "/");

Re: [PHP] Semplice client FTP

Inviato: giovedì 18 settembre 2008, 16:45
da kelev
Grazie mille  :D