Classe de gestion ftp

Soyez le premier à donner votre avis sur cette source.

Vue 5 297 fois - Téléchargée 821 fois

Description

Voilà une classe permettant la gestion d'un serveur FTP (envoyer, supprimer, télécharger des fichiers etc ...)
Je pense que la source est suffisamment commentée mais si vous avez des questions n'hésitez pas !

Source / Exemple :


<?php
                                      ###########                                
                                      #Class FTP#
                                      ###########
/*
########################################
#       Exemple d'utilisation :        #
#<?php                                 #
#require 'FTP.class.php';              #
#$ftp = new FTP($host,$user,$password);#
#try {                                 #
#$ftp->connect();                      #
#  // Utilisation des méthodes         #
# }                                    #
#catch (FTPException $e) {             #
#	echo $e;                           #
#}                                     #
#?>                                    #
########################################*/

									  
class FTP {
/*

  • FTP stream
*
  • @var resource
  • /
private $_stream; /*
  • FTP user
*
  • @var string
  • /
private $_user; /*
  • FTP password
*
  • @var string
  • /
private $pwd; /*
  • FTP host
*
  • @var string
  • /
private $_host; /*
  • FTP port
*
  • @var int
  • /
private $_port = 21; /*
  • FTP timeout
*
  • @var int
  • /
private $_timeout = 90; /*
  • FTP passive mode flag
*
  • @var bool
  • /
private $_passive = false; /*
  • SSL-FTP connection flag
*
  • @var bool
  • /
private $_ssl = false; /*
  • System type of FTP server
*
  • @var string
  • /
public $system_type; /**
  • Initialize connection params
*
  • @param string $host
  • @param string $user
  • @param string $password
  • @param int $port
  • @param int $timeout (seconds)
  • /
public function __construct($host = null, $user = null, $password = null, $port = 21, $timeout = 90) { $this->_host = $host; $this->_user = $user; $this->_pwd = $password; $this->_port = (int)$port; $this->_timeout = (int)$timeout; } // Auto-close connection public function __destruct(){ $this->close(); } /* Set connection params :
  • @param int $port
  • @param int $timeout
  • @param bool $passive
  • @param bool $ssl
  • /
public function setParams($port =21, $timeout=90, $passive=false, $ssl=false) { $this->_port = (int)$port; $this->_timeout = (int)$timeout; $this->_passive = (bool)$passive; $this->_ssl = $ssl; } /* Close FTP connection
  • /
public function close() { // check for valid FTP stream if($this->_stream) { ftp_close($this->_stream); $this->_stream = false; } } /* Change current folder @param string $directory
  • /
public function chdir($directory) { if(ftp_chdir($this->_stream, $directory)) { } else { throw new FTPException("Failed to change name of directory to $directory"); } } /* Set file permissions @param int $permission (ex: 0644) @param string $file
  • /
public function chmod($permission = 0, $file = null) { if(ftp_chmod($this->_stream, $permission, $file)) { } else { throw new FTPException("Failed to set file permissions for $file"); } } /* Connect to FTP server
  • /
public function connect() { if(!$this->_ssl) { if(!$this->_stream = ftp_connect($this->_host, $this->_port, $this->_timeout)) { throw new FTPException("Failed to connect to {$this->_host}"); } } elseif(function_exists("ftp_ssl_connect")) { if(!$this->_stream = ftp_ssl_connect($this->_host, $this->_port, $this->_timeout)) { throw new FTPException("Failed to connect to {$this->_host} (SSL connection)"); } } else { throw new FTPException("Failed to connect to {$this->_host} (invalid connection type)"); } if(ftp_login($this->_stream, $this->_user, $this->_pwd)) { ftp_pasv($this->_stream, (bool)$this->_passive); $this->system_type = ftp_systype($this->_stream); } else { throw new FTPException("Failed to connect to {$this->_host} (login failed)"); } } /* Delete a file on server @param string $file
  • /
public function delete ($file = null) { if(ftp_delete($this->_stream, $file)) { } else { throw new FTPException("Failed to delete file $file"); } } /**
  • Download file from server
*
  • @param string $remote_file
  • @param string $local_file
  • @param int $mode
  • /
public function get($remote_file, $local_file, $mode = FTP_ASCII) { if(ftp_get($this->_stream, $local_file, $remote_file, $mode)) { } else { throw new FTPException("Failed to get file $remote_file"); } } /* Get date of last change of a file @param string $file @return string
  • /
public function mdtm($file) { return ftp_mdtm($this->_stream, $file); } /* Create folder on server @param string $directory
  • /
public function mkdir($directory) { if(ftp_mkdir($this->_stream, $directory)) { } else { throw new FTPException("Failed to create directory $directory on this server."); } } /* Get list of file/folder of a folder @param string $directory @return array
  • /
public function nlist($directory) { $list = array(); if($list = ftp_nlist($this->_stream, $directory)) { return $list; } else { throw new FTPException("Failed to get the file list of $directory"); } } /* Send a file on server @param string $local_file @param string $remote_file
  • /
public function put($local_file, $remote_file) { if(ftp_put($this->_stream, $remote_file, $local_file, FTP_ASCII)) { } else { throw new FTPException("Failed to upload file $local_file"); } } /* Get current folder's name @return string
  • /
public function pwd() { return ftp_pwd($this->_stream); } /* Get a detailed list of file/folder of a folder @param string $directory @return array
  • /
public function rawlist($directory) { $list = array(); if($list = ftp_rawlist($this->_stream, $directory)) { return $list; } else { throw new FTPException("Failed to get the file list of $directory"); } } /* Rename a file @param string $oldname @param string $newname
  • /
public function rename($oldname, $newname) { if(ftp_rename($this->_stream, $oldname, $newname)) { } else { throw new FTPException("Failed to rename file $oldname"); } } /* Delete a folder @param string $sirectory
  • /
public function rmdir($directory) { if(ftp_rmdir($this->_stream, $directory)) { } else { throw new FTPException("Failed to delete directory $directory"); } } /* Get file's size @param string $file @return int
  • /
public function size($file) { return ftp_size($this->_stream, $file); } } ################################################################### #Class FTPException & Interface IException & Class CustomException# ################################################################### interface IException { /* Protected methods inherited from Exception class */ public function getMessage(); // Exception message public function getCode(); // User-defined Exception code public function getFile(); // Source filename public function getLine(); // Source line public function getTrace(); // An array of the backtrace() public function getTraceAsString(); // Formated string of trace /* Overrideable methods inherited from Exception class */ public function __toString(); // formated string for display public function __construct($message = null, $code = 0); } abstract class CustomException extends Exception implements IException { protected $message = 'Unknown exception'; // Exception message private $string; // Unknown protected $code = 0; // User-defined exception code protected $file; // Source filename of exception protected $line; // Source line of exception private $trace; // Unknown public function __construct($message = null, $code = 0) { if (!$message) { throw new $this('Unknown '. get_class($this)); } parent::__construct($message, $code); } public function __toString() { return 'Error with message : ' . get_class($this) . " '{$this->message}' in {$this->file}(line {$this->line})<br />" . "{$this->getTraceAsString()}"; } } class FTPException extends CustomException {} ?>

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Bonjour,
sil vous plait , moi j'aurai besoin de votre aide, c'est vraimen important svp.
Nous recevons un fichier .zip sur nos serveurs via ftp contenant une base d'annonces, une base d'utilisateur ainsi que les images liées au annonces. Nous devons récupérer automatiquement ces fichiers dans notre base de donnée en annule et remplace, svp jai besoin d'un script qui me permet de faire sa merci, franchement je vous serez reconnaissant merci.
Si vous voulez un exemple de ce qu'on peut faire avec cette classe rendez-vous ici : http://minichat.uphero.com/ftp/
:)
Messages postés
373
Date d'inscription
samedi 1 juin 2002
Statut
Membre
Dernière intervention
17 juin 2013

Bonjour,
Autant pour moi, je n'avais pas pensé que l'encodage du fichier était en utf-8 + bom, j'utilise Edit+ et comme j'avais réglé ANSI par défaut, je croyais que tout fichier modifié été enregistré dans ce format, hors l'ANSI n'est appliqué par défaut que sur les nouveaux fichiers, les anciens gardent leur format. Quand on y réfléchi c'est préférable.

Pour les étoiles, pas étonnant, ce site comporte encore des bugs, moi j'ai déjà eu des post qui ont disparus.

Sinon cette classe n'est pas mal, mais je ne suis pas un as des classes PHP BJ33 a un avis bien plus sure que le mien, alors attendons et laissons les grands parler...
Messages postés
145
Date d'inscription
vendredi 13 juin 2003
Statut
Membre
Dernière intervention
1 mai 2012

Salut

<<Tu voudrais que j'approfondisse ma classe d'exception bj33 ?

Juste en savoir plus sur le type d'exception, où elle se déclenche, etc.

abstract class Customise extends Exception implements IException {
protected $message = 'Exception inconnue. Unknown exception';
private $chaine;
protected $code = 0;
protected $fichier;
protected $ligne;
private $trace;

public function __construct($message null, $code 0) {
if (!$message) {
throw new $this('Inconnu/Unknown '. get_class($this));
}
parent::__construct($message, $code);

}

public function __toString() {
return get_class($this)." '{$this->message}' dans {$this->file} ligne({$this->line})\r\n"."{$this->getTraceAsString()}";
}
}

include_once 'Classes/Erreurs/Exceptions/Customise.php';

class Generique extends Customise implements IException {}

interface IException {
public function getMessage();
public function getCode();
public function getFile();
public function getLine();
public function getTrace();
public function getTraceAsString();
public function __toString();
public function __construct($ch_exception,$code = 0);
}

<<Qu'est-ce qui ne va pas ?

Assignation dans une condition.

<<La classe ne déclare pas de bom

évidement, un BOM c'est une suite de métacaractères. Or elle est encodée en UFT-8 avec bom.

http://fr.wikipedia.org/wiki/Indicateur_d%27ordre_des_octets

En clair, il faut virer ce bom, notepad++ fait çà très bien, ou changer l'encodage.

<<que veux-tu dire au sujet des étoiles, moi j'en ai bien 10 et quand je sélectionne la 8 j'en ai bien 8 de prisent

Ce n'est la première fois, parfois il divise au lieu de multiplier.
Messages postés
373
Date d'inscription
samedi 1 juin 2002
Statut
Membre
Dernière intervention
17 juin 2013

inwebo : Merci pour l'info, mais je ne peux pas modifier la config php de mon serveur, je suis en iso 8859-1 et tout mon site tourne très bien comme ca.
La classe ne déclare pas de bom, elle ne devrait donc pas altérer l'échange, de plus la connexion effectuée l'affichage des données fonctionne sans sourciller, comment expliquer cela ??? Je suis peut-être nulle (allez savoir) mais j'aime comprendre !

bj33 : que veux-tu dire au sujet des étoiles, moi j'en ai bien 10 et quand je sélectionne la 8 j'en ai bien 8 de prisent ???

Bonne prog.
@+ JLN
Afficher les 16 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.