begin process at 2012 05 27 21:40:00
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseau & Internet

 > GESTION FTP (CLASSE)

GESTION FTP (CLASSE)


 Information sur la source

Note :
Aucune note
Catégorie :Réseau & Internet Classé sous :ftp, fichier, upload, download, poo Niveau :Débutant Date de création :02/12/2010 Date de mise à jour :02/12/2010 11:33:07 Vu :3 063

Auteur : shevabam

Ecrire un message privé
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 Description

Cette classe permet de :
- se connecter à un serveur FTP (SSL ou non)
- afficher un listing complet ou non d'un répertoire
- créer un répertoire
- supprimer un répertoire
- changer de répertoire
- remonter d'un niveau
- renommer un fichier ou un dossier
- supprimer un fichier
- afficher la taille d'un fichier
- changer les droits d'accès à un fichier / dossier
- uploader un fichier
- récupérer un fichier

Un exemple est en conclusion ;)

Source

  • <?php
  • /**
  • * FTP
  • *
  • * Gestion FTP
  • *
  • * @author ShevAbam
  • * @version 1.0 - 02 dec 2010
  • */
  • class FTP
  • {
  • private $_host;
  • private $_user;
  • private $_password;
  • private $_port;
  • private $_timeout;
  • private $_ssl;
  • private $_conn;
  • /**
  • * Constructeur
  • */
  • public function __construct($host, $user = 'anonymous', $pass = '', $port = 21, $timeout = 90, $ssl = false)
  • {
  • $this->setHost($host);
  • $this->setUser($user);
  • $this->setPassword($pass);
  • $this->setPort($port);
  • $this->setTimeout($timeout);
  • $this->setSsl($ssl);
  • $this->_connection();
  • $this->_login();
  • return $this;
  • }
  • /**
  • * Retourne le serveur
  • */
  • public function getHost()
  • {
  • return $this->_host;
  • }
  • /**
  • * Définit le serveur
  • */
  • public function setHost($new)
  • {
  • if (trim(!empty($new)))
  • $this->_host = $new;
  • return $this;
  • }
  • /**
  • * Retourne l'utilisateur
  • */
  • public function getUser()
  • {
  • return $this->_user;
  • }
  • /**
  • * Définit l'utilisateur
  • */
  • public function setUser($new)
  • {
  • if (trim(!empty($new)))
  • $this->_user = $new;
  • return $this;
  • }
  • /**
  • * Retourne le mot de passe
  • */
  • public function getPassword()
  • {
  • return $this->_password;
  • }
  • /**
  • * Définit le mot de passe
  • */
  • public function setPassword($new)
  • {
  • $this->_password = $new;
  • return $this;
  • }
  • /**
  • * Retourne le port
  • */
  • public function getPort()
  • {
  • return $this->_port;
  • }
  • /**
  • * Définit le port
  • */
  • public function setPort($new)
  • {
  • if (trim(!empty($new)))
  • $this->_port = $new;
  • return $this;
  • }
  • /**
  • * Retourne le timeout
  • */
  • public function getTimeout()
  • {
  • return $this->_timeout;
  • }
  • /**
  • * Définit le timeout
  • */
  • public function setTimeout($new)
  • {
  • if (trim(!empty($new)) && is_numeric($new))
  • $this->_timeout = $new;
  • return $this;
  • }
  • /**
  • * Retourne la valeur du mode SSL
  • */
  • public function getSsl()
  • {
  • return $this->_ssl;
  • }
  • /**
  • * Définit le mode SSL
  • */
  • public function setSsl($new)
  • {
  • if (trim(!empty($new)) && is_bool($new))
  • $this->_ssl = $new;
  • return $this;
  • }
  • /**
  • * Connexion en SSL ou non
  • */
  • private function _connection()
  • {
  • if ($this->_ssl == true)
  • {
  • $this->_conn = ftp_ssl_connect($this->_host, $this->_port, $this->_timeout);
  • }
  • elseif ($this->_ssl == true || $this->_conn == false)
  • {
  • $this->_conn = ftp_connect($this->_host, $this->_port, $this->_timeout);
  • }
  • }
  • /**
  • * Identification
  • */
  • private function _login()
  • {
  • if ($this->_conn != false)
  • ftp_login($this->_conn, $this->_user, $this->_password);
  • }
  • /**
  • * Active le mode passif
  • */
  • public function enablePassive()
  • {
  • if ($this->_conn != false)
  • {
  • ftp_pasv($this->_conn, true);
  • }
  • return $this;
  • }
  • /**
  • * Ferme la connexion
  • */
  • public function close()
  • {
  • if ($this->_conn != false)
  • return ftp_close($this->_conn);
  • }
  • /**
  • * Alias de close()
  • */
  • public function quit()
  • {
  • $this->close();
  • }
  • /**
  • * Liste le contenu d'un dossier avec les détails ou non
  • */
  • public function ls($dir = '.', $full = false)
  • {
  • if ($this->_conn != false)
  • {
  • if ($full === false)
  • {
  • $content = ftp_nlist($this->_conn, $dir);
  • // On supprime les dossiers "." et ".."
  • unset($content[0], $content[1]);
  • }
  • else
  • {
  • $content = ftp_rawlist($this->_conn, $dir);
  • }
  • return $content;
  • }
  • }
  • /**
  • * Retourne le nom du dossier courant
  • */
  • public function pwd()
  • {
  • if ($this->_conn != false)
  • return ftp_pwd($this->_conn);
  • }
  • /**
  • * Création d'un répertoire
  • */
  • public function mkdir($dir = '')
  • {
  • if ($this->_conn != false)
  • {
  • if (trim(!empty($dir)))
  • {
  • if (!ftp_mkdir($this->_conn, $dir))
  • throw new Exception('FTP :: Impossible de créer le répertoire "'.$dir.'" (existant ou erreur)');
  • }
  • }
  • return $this;
  • }
  • /**
  • * Suppression d'un répertoire
  • */
  • public function rmdir($dir = '')
  • {
  • if ($this->_conn != false)
  • {
  • if (trim(!empty($dir)))
  • {
  • if (!ftp_rmdir($this->_conn, $dir))
  • throw new Exception('FTP :: Impossible de supprimer le répertoire "'.$dir.'" (inexistant ou erreur)');
  • }
  • }
  • return $this;
  • }
  • /**
  • * Changement de répertoire
  • */
  • public function cd($dir = '')
  • {
  • if ($this->_conn != false)
  • {
  • if (trim(!empty($dir)))
  • {
  • if (!ftp_chdir($this->_conn, $dir))
  • throw new Exception('FTP :: Impossible de changer de répertoire ("'.$dir.'")');
  • }
  • }
  • return $this;
  • }
  • /**
  • * Remonte au dossier parent
  • */
  • public function cdup()
  • {
  • if ($this->_conn != false)
  • {
  • if (!ftp_cdup($this->_conn))
  • throw new Exception('FTP :: Impossible de changer de répertoire ("'.$dir.'")');
  • }
  • return $this;
  • }
  • /**
  • * Renomme un fichier ou un dossier
  • */
  • public function rename($oldname, $newname)
  • {
  • if ($this->_conn != false)
  • {
  • if (trim(!empty($oldname)) && trim(!empty($newname)))
  • {
  • if (!ftp_rename($this->_conn, $oldname, $newname))
  • throw new Exception('FTP :: Impossible de renommer "'.$oldname.'" en "'.$newname.'" (inexistant ou erreur)');
  • }
  • }
  • return $this;
  • }
  • /**
  • * Supprime un fichier
  • */
  • public function del($file = '')
  • {
  • if ($this->_conn != false)
  • {
  • if (trim(!empty($file)))
  • {
  • if (!ftp_delete($this->_conn, $file))
  • throw new Exception('FTP :: Impossible de supprimer le fichier "'.$file.'" (inexistant ou erreur)');
  • }
  • }
  • return $this;
  • }
  • /**
  • * Retourne la taille d'un fichier en octet
  • */
  • public function size($file = '')
  • {
  • if ($this->_conn != false)
  • {
  • if (trim(!empty($file)))
  • {
  • $size = ftp_size($this->_conn, $file);
  • if ($size == -1)
  • throw new Exception('FTP :: Impossible de récupérer la taille du fichier "'.$file.'" (inexistant ou erreur)');
  • else
  • return $size;
  • }
  • }
  • }
  • /**
  • * Modifie les droits d'un fichier ou d'un dossier
  • */
  • public function chmod($file, $mode)
  • {
  • if ($this->_conn != false)
  • {
  • if (trim(!empty($file)) && trim(!empty($mode)))
  • {
  • $mode = str_pad($mode, 4, '0', STR_PAD_LEFT);
  • if (!ftp_chmod($this->_conn, $mode, $file))
  • throw new Exception('FTP :: Impossible de modifier les droits du fichier/dossier "'.$file.'"');
  • }
  • }
  • return $this;
  • }
  • /**
  • * Upload un fichier
  • */
  • public function put($local, $remote, $mode = FTP_BINARY)
  • {
  • if ($this->_conn != false)
  • {
  • if (trim(!empty($local)) && trim(!empty($remote)))
  • {
  • if (!ftp_put($this->_conn, $remote, $local, $mode))
  • throw new Exception('FTP :: Impossible d\'uploader le fichier "'.$local.'"');
  • }
  • }
  • return $this;
  • }
  • /**
  • * Récupère un fichier
  • */
  • public function get($remote, $local, $mode = FTP_BINARY)
  • {
  • if ($this->_conn != false)
  • {
  • if (trim(!empty($local)) && trim(!empty($remote)))
  • {
  • if (!ftp_get($this->_conn, $local, $remote, $mode))
  • throw new Exception('FTP :: Impossible de récupérer le fichier "'.$local.'"');
  • }
  • }
  • return $this;
  • }
  • }
  • ?>
<?php
/**
 * FTP
 * 
 * Gestion FTP
 *
 * @author ShevAbam
 * @version 1.0 - 02 dec 2010
 */
class FTP
{
    private $_host;
    private $_user;
    private $_password;
    private $_port;
    private $_timeout;
    private $_ssl;
    private $_conn;
    
    
    /**
     * Constructeur
     */
    public function __construct($host, $user = 'anonymous', $pass = '', $port = 21, $timeout = 90, $ssl = false)
    {
        $this->setHost($host);
        $this->setUser($user);
        $this->setPassword($pass);
        $this->setPort($port);
        $this->setTimeout($timeout);
        $this->setSsl($ssl);
        
        $this->_connection();
        $this->_login();
        
        return $this;
    }
    
    
    /**
     * Retourne le serveur
     */
    public function getHost()
    {
        return $this->_host;
    }
    
    /**
     * Définit le serveur
     */
    public function setHost($new)
    {
        if (trim(!empty($new)))
            $this->_host = $new;
        
        return $this;
    }
    
    /**
     * Retourne l'utilisateur
     */
    public function getUser()
    {
        return $this->_user;
    }
    
    /**
     * Définit l'utilisateur
     */
    public function setUser($new)
    {
        if (trim(!empty($new)))
            $this->_user = $new;
        
        return $this;
    }
    
    /**
     * Retourne le mot de passe
     */
    public function getPassword()
    {
        return $this->_password;
    }
    
    /**
     * Définit le mot de passe
     */
    public function setPassword($new)
    {
        $this->_password = $new;
        
        return $this;
    }
    
    /**
     * Retourne le port
     */
    public function getPort()
    {
        return $this->_port;
    }
    
    /**
     * Définit le port
     */
    public function setPort($new)
    {
        if (trim(!empty($new)))
            $this->_port = $new;
        
        return $this;
    }
    
    /**
     * Retourne le timeout
     */
    public function getTimeout()
    {
        return $this->_timeout;
    }
    
    /**
     * Définit le timeout
     */
    public function setTimeout($new)
    {
        if (trim(!empty($new)) && is_numeric($new))
            $this->_timeout = $new;
        
        return $this;
    }
    
    /**
     * Retourne la valeur du mode SSL
     */
    public function getSsl()
    {
        return $this->_ssl;
    }
    
    /**
     * Définit le mode SSL
     */
    public function setSsl($new)
    {
        if (trim(!empty($new)) && is_bool($new))
            $this->_ssl = $new;
        
        return $this;
    }
    
    
    
    /**
     * Connexion en SSL ou non
     */
    private function _connection()
    {
        if ($this->_ssl == true)
        {
            $this->_conn = ftp_ssl_connect($this->_host, $this->_port, $this->_timeout);
        }
        elseif ($this->_ssl == true || $this->_conn == false)
        {
            $this->_conn = ftp_connect($this->_host, $this->_port, $this->_timeout);
        }
    }
    
    /**
     * Identification
     */
    private function _login()
    {
        if ($this->_conn != false)
            ftp_login($this->_conn, $this->_user, $this->_password);
    }
    
    
    /**
     * Active le mode passif
     */
    public function enablePassive()
    {
        if ($this->_conn != false)
        {
            ftp_pasv($this->_conn, true);
        }
        
        return $this;
    }
    
    
    /**
     * Ferme la connexion
     */
    public function close()
    {
        if ($this->_conn != false)
            return ftp_close($this->_conn);
    }
    
    /**
     * Alias de close()
     */
    public function quit()
    {
        $this->close();
    }
    
    
    /**
     * Liste le contenu d'un dossier avec les détails ou non
     */
    public function ls($dir = '.', $full = false)
    {
        if ($this->_conn != false)
        {
            if ($full === false)
            {
                $content = ftp_nlist($this->_conn, $dir);
                
                // On supprime les dossiers "." et ".."
                unset($content[0], $content[1]);
            }
            else
            {
                $content = ftp_rawlist($this->_conn, $dir);
            }
            
            return $content;
        }
    }
    
    
    /**
     * Retourne le nom du dossier courant
     */
    public function pwd()
    {
        if ($this->_conn != false)
            return ftp_pwd($this->_conn);
    }
    
    
    /**
     * Création d'un répertoire
     */
    public function mkdir($dir = '')
    {
        if ($this->_conn != false)
        {
            if (trim(!empty($dir)))
            {
                if (!ftp_mkdir($this->_conn, $dir))
                    throw new Exception('FTP :: Impossible de créer le répertoire "'.$dir.'" (existant ou erreur)');
            }
        }
        
        return $this;
    }
    
    /**
     * Suppression d'un répertoire
     */
    public function rmdir($dir = '')
    {
        if ($this->_conn != false)
        {
            if (trim(!empty($dir)))
            {
                if (!ftp_rmdir($this->_conn, $dir))
                    throw new Exception('FTP :: Impossible de supprimer le répertoire "'.$dir.'" (inexistant ou erreur)');
            }
        }
        
        return $this;
    }
    
    
    /**
     * Changement de répertoire
     */
    public function cd($dir = '')
    {
        if ($this->_conn != false)
        {
            if (trim(!empty($dir)))
            {
                if (!ftp_chdir($this->_conn, $dir))
                    throw new Exception('FTP :: Impossible de changer de répertoire ("'.$dir.'")');
            }
        }
        
        return $this;
    }
    
    
    /**
     * Remonte au dossier parent
     */
    public function cdup()
    {
        if ($this->_conn != false)
        {
            if (!ftp_cdup($this->_conn))
                throw new Exception('FTP :: Impossible de changer de répertoire ("'.$dir.'")');
        }
        
        return $this;
    }
    
    
    /**
     * Renomme un fichier ou un dossier
     */
    public function rename($oldname, $newname)
    {
        if ($this->_conn != false)
        {
            if (trim(!empty($oldname)) && trim(!empty($newname)))
            {
                if (!ftp_rename($this->_conn, $oldname, $newname))
                    throw new Exception('FTP :: Impossible de renommer "'.$oldname.'" en "'.$newname.'" (inexistant ou erreur)');
            }
        }
        
        return $this;
    }
    
    
    /**
     * Supprime un fichier
     */
    public function del($file = '')
    {
        if ($this->_conn != false)
        {
            if (trim(!empty($file)))
            {
                if (!ftp_delete($this->_conn, $file))
                    throw new Exception('FTP :: Impossible de supprimer le fichier "'.$file.'" (inexistant ou erreur)');
            }
        }
        
        return $this;
    }
    
    
    /**
     * Retourne la taille d'un fichier en octet
     */
    public function size($file = '')
    {
        if ($this->_conn != false)
        {
            if (trim(!empty($file)))
            {
                $size = ftp_size($this->_conn, $file);
                
                if ($size == -1)
                    throw new Exception('FTP :: Impossible de récupérer la taille du fichier "'.$file.'" (inexistant ou erreur)');
                else
                    return $size;
            }
        }
    }
    
    
    /**
     * Modifie les droits d'un fichier ou d'un dossier
     */
    public function chmod($file, $mode)
    {
        if ($this->_conn != false)
        {
            if (trim(!empty($file)) && trim(!empty($mode)))
            {
                $mode = str_pad($mode, 4, '0', STR_PAD_LEFT);
                
                if (!ftp_chmod($this->_conn, $mode, $file))
                    throw new Exception('FTP :: Impossible de modifier les droits du fichier/dossier "'.$file.'"');
            }
        }
        
        return $this;
    }
    
    
    /**
     * Upload un fichier
     */
    public function put($local, $remote, $mode = FTP_BINARY)
    {
        if ($this->_conn != false)
        {
            if (trim(!empty($local)) && trim(!empty($remote)))
            {
                if (!ftp_put($this->_conn, $remote, $local, $mode))
                    throw new Exception('FTP :: Impossible d\'uploader le fichier "'.$local.'"');
            }
        }
        
        return $this;
    }
    
    
    /**
     * Récupère un fichier
     */
    public function get($remote, $local, $mode = FTP_BINARY)
    {
        if ($this->_conn != false)
        {
            if (trim(!empty($local)) && trim(!empty($remote)))
            {
                if (!ftp_get($this->_conn, $local, $remote, $mode))
                    throw new Exception('FTP :: Impossible de récupérer le fichier "'.$local.'"');
            }
        }
        
        return $this;
    }
}
?>

 Conclusion

/* E X E M P L E -----------------------------------------------*/

    /**
        Cet exemple se connecte à un serveur FTP et effectue les
        étapes suivantes :
            - activation du mode passif
            - création d'un répertoire
            - upload d'un fichier
            - affichage du listing d'un répertoire
            - suppression du fichier uploadé
            - suppression du répertoire créé
            - fermeture de la connexion
        
        Bien sûr, vous pouvez effectuer d'autres manipulations
        avec cette classe !
    */

    $oFTP = new FTP('monServeur', 'utilisateur', 'motdepasse');
    $oFTP
        ->enablePassive()
        ->mkdir('mon_repertoire')
        ->put('monImage.png', 'mon_repertoire/monImage.png');

    echo '<pre>';
    print_r($oFTP->ls('mon_repertoire', true));
    echo '</pre>';


    $oFTP
        ->del('mon_repertoire/monImage.png')
        ->rmdir('mon_repertoire')
        ->close();

/*------------------------------------ ---------------------------- */


 Historique

02 décembre 2010 11:33:07 :
Oubli des balises <?php et ?> dans la source

 Sources du même auteur

Source avec Zip COMPRESSER (MINIMISER) UN FICHIER CSS
MANIPULATION DES DONNÉES IPTC

 Sources de la même categorie

INSPECTEUR DE PAGES (VÉRIFIEZ SI DES SITES AFFICHENT UN TEXT... par pablo836
Source avec Zip Source avec une capture GÉOLOCALISATION par pgl10
Source avec Zip TAPI : METTRE EN RELATION DEUX POSTES TELEPHONIQUES par ravery
Source avec Zip CLIENT / SERVEUR : LES SOCKETS par Morphinof
Source avec Zip VALIDATEUR_3WC par lezj

 Sources en rapport avec celle ci

UPLOADER DES FICHIER DANSUN DOSSIER, SÉCURISÉ AVEC MOT DE PA... par raizzo
Source avec Zip Source avec une capture A-ANNONCES VERSION PHP 5 par cod57
Source avec Zip Source avec une capture UPLOADER DE FICHIER PHP - AVEC GESTION DES FICHIERS par DiabloBros
Source avec Zip Source avec une capture DOWN UP SCRIPT par spacedelta
Source avec Zip CLASSE SIMPLE DE GESTION DE FICHIERS par alexarbitre

Commentaires et avis

Commentaire de genetApt151 le 05/12/2010 11:48:07

Salut,

C'est vrai qu'en objet, c'est plus agréable à utiliser, mais j'ai remarqué quelques problèmes

1- Tester la validité d'une variable dans un setter est bonne chose mais il y a des erreurs.
Tout d'abord faire un if (trim(!empty($new))) n'a aucun sens, faire un trim sur un booléan ??
si tu veux tester que la variable en entrée n'est pas vide il faut utilisé : if(!trim($new)) ou if(trim($new) == null) ou if(trim($x) == '').  Ensuite pour tester un entier (ex avec : setTimeout())
utiliser is_numeric suffit, pas besoin de tester que la variable est vide.

2- Utiliser des exceptions est une bonne pratique mais il faut alors crée une classe d'exception spécifique à ta classe au lieu du type générique Exception. Tu peux aussi utiliser les exceptions définie par la SPL. Il faut également spécifier un code d'erreur quand tu lèves une exception.

3- si tu utilises les exceptions pour gérer les erreurs, il faut le faire jusqu'au bout,
par exemple qu'est ce qui se passe si la connexion échoue et $this->_conn = false ??  Il n'y a aucune erreur et toutes les fonctions tel pwd, mkdir . tourne dans le vide puise que tu fais if ($this->_conn != false). Test si la connexion a réussi dans la méthode _connection() et renvoie une exception si la elle a échouée et enlève tous ces if ($this->_conn != false) inutiles.

4- Le nom de ta classe : FTP est trop commun et risque d'entrainer des confits, soit tu lui donnes a nom plus sophistiquée ou tu utilises les namespaces.

Commentaire de DiGhan le 09/12/2010 10:34:46

Je rejoins le commentaire de genetAPT152 (pas très simple ton pseudo).

J'irai même plus loin en supprimant tous les tests "trim(!empty($new))" puisque dans tous les cas la connexion va échouer. C'est une vérification qui doit se faire en amont.

L'utilisation des exceptions est primordiale dans ta classe puisqu'il y a des "evenements" critiques (comme le statut de la connexion). Actuellement, le développeur n'a aucun retour mais surtout aucun message pour l'avertir. De plus comme l'a dit "genet...", les méthodes get() , put() ne doivent plus s'exécuter si la connexion a échoué.

Même si elles ne sont pas standardisées, tu respectes les conventions zend (plutôt bien pensées) et le code est propre.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

upload gro fichier [ par MisterJAD ] Bonjour à tous,j'ai besoin d'uploader via php et non via un logiciel ftp, des gros fichiers (max 10mo) sur le serveur.... mais meme lorsque je faitini Problème d'upload de fichier [ par phenixoiseau ] phénixOiseauBonjour,Voilà j'ai écrit un script pour charger un fichier vers un serveur. Lorsque j'execute le script depuis ma machine le chargement du Problème d'upload de fichier [ par phenixoiseau ] phénixOiseauBonjour,Voilà j'ai écrit un script pour charger un fichier vers un serveur. Lorsque j'execute le script depuis ma machine le chargement du Problème d'upload de fichier [ par phenixoiseau ] phénixOiseauBonjour,Voilà j'ai écrit un script pour charger un fichier vers un serveur. Lorsque j'execute le script depuis ma machine le chargement du upload [ par nairolf_88 ] bonjour &#224; tous je suis entrain de developper un script d'upload par ftp en php dont voici le code : ---BOF--- &lt;? if(isset($_POST["upload"]) upload ftp [ par iHoss ] J'ai un problème d'upload ftp :la connexion se fait comme prévue mais le fichier n'est pas uploadé.Ceci est le code : &lt;?$fichier = $_FILES['userfil Question sur l'upload en FTP (urgent) [ par fonetiklilian ] Bonjour à tous... J'ai un site hebergé chez lycos. Je n'ai donc pas accès au php.ini. J'ai un peu de mal avec toutes les sources que je trouve, car upload de fichier - interdire l'up de php. [ par pipouz ] bonjour a tous voila , jai un petit formulaire d'envoi de fichiers sur mon server apache , mais je voudrais pouvoir empecher l'upload de fichier PHP, Réaffichage d'un formulaire [ par ninoy ] Bonjour!Je suis en train de créer un formulaire,et j'ai quelques problèmes...Pour commencer, mon formulaire contient 2 input type text, un textarea et Probleme UPLOAD [ par prince4878 ] salut, quelqu'un peut me dire pourquoi ce CODE UPLOAD ne fonctione pas chez moi, en sachant que je l'ai testé sur une autre machine et ça a fonctionné


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,764 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales