Catégorie : Code en Php

Code en Php

  • Gerer les dates en php avec la class transDater

    Avec cette petite class je gère les dates plus facilement. Bien sûr on peut toujours l’améliorer pour lui rajouter la prise en charge de timestamp par exemple, je reste ouvert à vos suggestions.

    
    /**
     * transDater
     *
     * @package
     * @author luc
     * @copyright Copyright (c) 2012
     * @version $Id$
     * @access public
     */
    /* la date en entrée doit être valide mais pas de type timestamp */
    class TransDater {
    
        /**
         * TransDater::dateTransform()
         *
         * @param string $dateString
         * @param mixed $newDateFormat
         * @return
         */
        static function dateTransform($dateString = '01-01-1979', $newDateFormat) {
            if ($dateString && ($format = $newDateFormat)) {
                $date = new DateTime($dateString);
                return $date->format($format);
            }
            return (bool) false;
        }
    
        /**
         * *Si on récupère le numéro du mois de l'année on peut le transformer en nom en toutes lettres
         */
        static function monthTransformFr($date) {
            static $mois = array(
                '01' => 'janvier',
                '02' => 'fevrier',
                '03' => 'mars',
                '04' => 'avril',
                '05' => 'mai',
                '06' => 'juin',
                '07' => 'juillet',
                '08' => 'aout',
                '09' => 'septembre',
                '10' => 'octobre',
                '11' => 'novembre',
                '12' => 'decembre'
            );
            $m           = self::dateTransform($date, 'm');
    
            if (!empty($mois[$m])) {
                return (string) $mois[$m];
            }
        }
    
        /**
         * TransDater::dayWord()
         * @abstract Si on récupère le numéro du jour de l'année on peut le transformer en nom en toutes lettres (0->français,1->Anglais,2->Allemand)
         * @param mixed $date
         * @param mixed $int
         * @return
         */
        static function dayWord($date, $int) {
            $french  = array('dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi');
            $english = array('Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Monday');
            $german  = array('Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag', 'Montag');
            switch ($int) {
                case 0 : $day = $french;
                    break;
                case 1: $day = $english;
                    break;
                case 2: $day = $german;
                    break;
                default:
                    false;
            } // switch
            $d = self::dateTransform($date, 'w');
            if (!empty($day[$d])) {
                return (string) $day[$d];
            }
            return (bool) false;
        }
    
        /* fonction : bissextile */
    
        static function leapYear($date) {
            $date = self::dateTransform($date, 'y-m-d');
    
            if ((is_int($date / 4) && !is_int($date / 100)) || is_int($date / 400)) {
                return (bool) true;
            } else {
                return (bool) false;
            }
        }
    
        /**
         * TransDater::datePlusUnMois()
         *
         * @abstract fonction rajoutant un mois a une date
         * @param mixed $date
         * @return string date plus 1 mois
         */
        static function datePlusUnMois($date) {
            $newDate = new DateTime($date);
            $newDate->modify('+1 month');
    
            return (string) $newDate->format('Y-m-d');
        }
    
        /**
         * TransDater::dateMoinsUnJour(()
         *
         * @abstract fonction enlevant 1 jour à une date
         * @param mixed $date
         * @return string date moins 1 jour
         */
        static function dateMoinsUnJour($date) {
            $newDate = new DateTime($date);
    
            return $newDate->modify('-1 day');
        }
    
        /**
         * TransDater::age()
         *
         * @abstract Fonction pour calculer l'age
         * @param string  date de naissance type 'd/m/Y'
         * @param string  date à laquelle on veux calculer l'age
         * @return age /integer
         */
        static function age($date_naissance, $currentDate = NULL) {
            if ($date_naissance != NULL) {
                if ($currentDate == NULL) {
                    $currentDate = date('d/m/Y');
                }
            }
            $arr1 = explode('/', $date_naissance);
            $arr2 = explode('/', $currentDate);
            if (($arr1[1] < $arr2[1]) || (($arr1[1] == $arr2[1]) && ($arr1[0] <= $arr2[0]))) {
                return $arr2[2] - $arr1[2];
            }
            return (int) $arr2[2] - $arr1[2] - 1;
        }
    
        /**
         * returns the difference, in days, between two dates.  avoids the daylight's savings issue by using GMT
         */
        static function dateDiff($date1, $date2) {
            $date1 = date_parse($date1);
            $date2 = date_parse($date2);
            return ((gmmktime(0, 0, 0, $date1['month'], $date1['day'], $date1['year']) - gmmktime(0, 0, 0, $date2['month'], $date2['day'], $date2['year'])) / 3600 / 24);
        }
    
        /**
         * @name dateExcelToHuman()
         * @param string $date
         * @return string date
         */
        static function dateExcelToHuman($date) {
            $date = ($date - 25569) * 86400;
            return (string) date('Y-m-d H:i:s', $date);
        }
    
        /**
         * @abstract Returns elapsed time with human format in french
         *
         * @param     int The timestamp of the date
         * @return    string
         */
        public function elapsed_time($date) {
    
            $old_time = $date;
    
            // Current time
            $time = time();
    
            // Little check
            if ($time < $old_time) {
    
                return FALSE;
            }
    
            // Get seconds elapsed
            $seconds = round($time - $old_time);
    
            // Convert into minutes
            $minutes = round($seconds / 60);
    
            // Convert into hours
            $hours = round($minutes / 60);
    
            // Returns
            if ($hours >= 72) {
                return 'Le ' . date('d/m/Y', $old_time);
            } elseif ($hours >= 48 && $hours < 72) {
                return 'Avant Hier';
            } elseif ($hours >= 24 && $hours < 48) {
                return 'Hier';
            } elseif ($hours >= 1) {
                return 'Il y a ' . $hours . ' h';
            } elseif ($minutes >= 1) {
                return 'Il y a ' . $minutes . ' mn';
            } elseif ($seconds == 0) {
                return 'A l\'instant';
            } else {
                return 'Il y a ' . $seconds . ' s';
            }
        }
    
        static public function addSeconde(\DateTime $date, $seconde) {
            return self::addInterval($date, 'PT' . (int) $seconde . 'S');
        }
    
        static public function addMonth(\DateTime $date, $month) {
            return self::addInterval($date, 'P' . (int) $month . 'M');
        }
    
        static public function addDay(\DateTime $date, $day) {
            return self::addInterval($date, 'P' . (int) $day . 'D');
        }
    
        static public function addYear(\DateTime $date, $year) {
            return self::addInterval($date, 'P' . (int) $year . 'Y');
        }
    
        static public function addInterval(\DateTime $date, $value) {
            try {
                $interval = new \DateInterval($value);
                $date->add($interval);
            } catch (Exception $exc) {
                throw new \Exception(__METHOD__ . 'The format of $value is not valid (String) exemple : P55S (add 55 second) ');
            }
            return $date;
        }
    
    }
    
    

    à bientôt Grand maître L

  • Php 5.4 Alpha 1, quand php renait de ces cendres…

    Php 5.4 Alpha 1, quand php renait de ces cendres…

    Une nouvelle mouture de notre langage de prédilection présente le bout de son nez. Malgré les apparences, il s’agit d’une version en réalité majeure. En effet, la mort de PHP6 il y a plus d’un an pour cause de problème d’intégrations de l’Unicode a chamboulé le planning.

    C’est pour cela qu’une version alpha vient d’être mise à disposition sur le SVN de PHP.net.

    Les contributeurs ne se sont pas endormis, car plus de 6 000 points ont été modifiés. De nombreuses idées de PHP6 ont été implémentées. Malheureusement, la bonne idée de l’Unicode a été repoussée sans date.

    Comment fonctionne PHP ?

    PHP est un langage de programmation impérative de type CGI, qui peut être utilisé en procédural ou orienté objet (POO). C’est un langage de haut niveau qui doit être exécuté par une machine spéciale pour fonctionner, généralement un serveur (cette exécution ne peut pas être accomplie par un navigateur, il en est incapable).

    Pour que le PHP soit interprété, il faut qu’on lui dise comment ; c’est le rôle du moteur de PHP, appelé Zend Engine.

    Ce moteur est écrit en C. C’est le cœur du langage ; c’est en fait lui qui évolue à chaque nouvelle version.

    Les nouveautés

    Principaux changement apportés

    safe_mode, register_globals et register_long_array sont définitivement supprimés de PHP. De quoi ravir les développeurs, qui n’aurons plus à réaliser toute une série de vérifications concernant ces directives de configuration.

    Pour le register_globals, on peut dire que c’est une vraie avancée en termes de sécurité, même si depuis de nombreuses versions cette fonction était désactivée par défaut dans le php.ini.

    Avec le register_globlals à « ON », on ne faisait pas de différence entre une variable superglobale et une variable « interne » : un vrai problème de sécurité, car on ne savait pas si une variable venait du site — et donc était fiable — ou de l’extérieur, et par conséquent potentiellement dangereuse.

    Concernant le safe_mode et register_long_array, la documentation de PHP indique en effet :

    Citation : Documentation PHP

    Cette fonctionnalité est OBSOLÈTE depuis PHP 5.3.0. Nous vous encourageons vivement à ne plus l’utiliser.

    Les ajouts apportés à cette version

    Il est maintenant plus explicite de passer des arguments en références.

    Pour rappel, voici comment on passe un argument en référence avec PHP :

    Code : PHP – Soumission d’argument sous forme de référence

     <?php 
    function foo( & $var){
     $var++; 
    } 
    
    function & bar(){ 
    $a=5; return $a; 
    } 
    
    foo ( bar ()); 
    ?>

    Un passage par référence va modifier la variable inscrite en mémoire par une nouvelle version de cette variable, c’est le & devant $var qui le permet.

    Il est aussi possible de faire ceci, actuellement :

     <?php 
    myFunction(& $toto); 
    ?>

    Un simple avertissement est généré sous PHP 5.3. Désormais, avec PHP 5.4, le code plante et renvoie une erreur.

    Les traits

    Une nouvelle fonctionnalité (un conteneur) apparaît également : les traits. C’est un regroupement de méthodes qui peuvent être partagées entre différentes classes (ce qui est différent de l’héritage et des interfaces).

    Image utilisateur Plus d’informations sur les traits.

    Ajout du support d’Autoconf

    GNU Autoconf, livré avec PHP 5.4 dans sa version 6.59, est un outil permettant de générer des scripts shell qui configurent automatiquement les sources d’un logiciel dans l’optique de l’adapter aux systèmes UNIX (Linux, Mac OS X, etc.).

    Notez que Autoconf ne fait que configurer : il n’est pas nécessaire aux personnes exécutant le script d’avoir Autoconf installé sur leurs machines.

    Image utilisateur Plus d’information sur Autoconf.

    Image utilisateur Image utilisateur Description officielle d’Autoconf.

    La feuille de route

    • Le 28 juin 2011, la version alpha 1 sera publiée.
    • Le 26 juillet, ce sera au tour de l’alpha 2.
    • La version bêta sera livrée le 23 août.
    • Enfin, la version Relase Candidate n° 1 (RC 1) sera publiée le 20 septembre 2011.
    • Après cela, une version RC sera publiée toutes les deux semaines, jusqu’à la version stable.

    Les dates présentées ci-dessus sont cependant susceptible d’être modifiées.

    La communauté de PHP

    Tout comme la communauté de l’anneau, la communauté de PHP était lancée pour fait de grandes choses car elle était unie. Cependant, des divisions apparaissent régulièrement sur la gouvernance et la prise de décisions.

    On peut en gros la diviser en deux groupes : les contributeurs historiques et les nouveaux contributeurs.

    Les contributeurs historiques considèrent que l’évolution doit aller vers une stabilisation du langage, une éradication des bugs et une simplification, alors que les autres aimeraient que les nouveautés soient implémentées plus rapidement pour ne pas se retrouver à attendre trop longtemps des fonctionnalités qu’ils jugent essentielles pour programmer avec des méthodes modernes.

    La dissolution des développeurs de PHP n’est heureusement pas à l’ordre du jour, mais il manque pourtant un leader.

    Rasmus Lerdorf, le créateur de PHP, serait capable de dire où il faut aller, néanmoins, il se contente de prendre le rôle de médiateur. Cette situation a conduit à un drame (la mort de PHP6), de nombreuses leçons doivent donc en être tirées…

    Image utilisateur Vous pouvez trouver la liste complète des nouveautés de cette version en vous rendant ici.

    Sources

    <pre class= »brush:[php] »>
  • Une fonction pratique pour vérifier la conformité d’un numero de téléphone en PHP

    En se moment je travail sur de petites fonctions bien pratiques que je pourrais réutiliser un peut partout dans mes projets.

    J’ai créé cette fonction pour répondre à un besoin simple et elle me satisfait

    Cette fonction renvoie true en cas de succès si non false.

    //fonction pour vérifier la conformité d'un numéro de tel Français
    function VerifTelFr($chaine){
    	$regex = "#^0[1-68]([-. ]?[0-9]{2}){4}$#";
    		if (preg_match($regex,$chaine)){
    					return true; 
    			} else {
    					return false;
    		}
    }
    

    @ bientôt Grand Maître L

  • Une fonction pratique pour controler un email en PHP

    Grace à cette petite fonction, vous serez en mesure de vérifier si l’email inscrit par votre visiteur est conforme. Pour cela j’utilise le « REGEX » ou « expressions régulières ».

    Cette fonction renvoie true en cas de succès si non false.

    //fonction pour vérifier l'orthographe d'un email
    function VerifEmail($chaine){
    	$regex = "#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#";
    		if (preg_match($regex,$chaine)) {
    					return true;
    			} else {
    					return false;
    		}
    }

    Grand Maître L

  • Prévalider un bouton radio en html et php

    Grâce à ce code il est possible de précocher dans un formulaire une valeur.

    Dans cet exemple on va utiliser un bouton radio.
    le html :

    <input name="sexe" type="radio" value="femme" /><?php echo $validf; ?> > Femme :
    <input name="sexe" type="radio" value="homme" /><?php echo $validh; ?> > Homme :

    le Php

    <?php 
    //ici on coche homme ou femme dans un bouton radio en récupérant les données de la bdd 
    if ($sexe == "femme"){ 
        $validf = "checked='checked'"; $validh = ""; 
    } elseif ($sexe == "homme"){ 
        $validf = ""; $validh = "checked='checked'"; 
    }

    Grand Maître L

  • Une fonction en Php pour déterminer si un nombre et paire ou impaire

    Grâce à cette fonction on peut savoir si un nombre et paire ou impaire facilement.

    <?php 
    $numerotation = 5; 
    
    function PaireOuImpaire($numerotation)
    {
    	$numero = $numerotation%2;
    		   if ($numero == 0) 
    			 {
    			$paire_ou_impaire = true;
    		} else {
    			$paire_ou_impaire = false;
    			}	
    		return $paire_ou_impaire ;
    }
    ?>
    

    Je m’en sert pour colorer une ligne sur deux dans un tableau, par exemple si il renvoie 1 c’est en bleu et si c’est 2 c’est rouge.

    Dans l’exemple ci-dessus, il va me renvoyer : false .

    Grand maître L

  • Réaliser un suivi des paquets Coliposte / Colissimo dans votre site internet

    Super Edit :

    J’ai des infos de la poste, ils sont en train de mettre en place une API Officielle.
    Pour cela il faut avoir un compte Inet-Expeditor et le service sera proposé en janvier 2014.
    Il répondra au jolis nom de « colis view ». Je vous conseille de vous rapprocher de votre commercial car l’ancienne API sera supprimée.

    Edit : Apres de nombreuses années sans problèmes, laposte.fr à apparemment fermé son WebService, au jour où j’écris ces lignes (25/04/2013), il ne fonctionne plus.

    Edit 2 : LA poste à mis en place un véritable webService, voici le lien de la documentation :

    https://www.coliposte.fr/pro/docs/docutheque/divers/socolissimo/integrationwsshipping.pdf

    Edit 3 : Tout est revenu dans l’ordre…

    Grâce à ce code très simple on va récupérer sur notre page l’information de suivi Coliposte de votre client sans se connecter au site coliposte.fr.

    <?php
      $ch = curl_init();
      $agent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)";
      $ref = "http://www.laposte.fr";
      $url_de_colissimo_suivi = "www.laposte.fr/outilsuivi/web/suiviInterMetiers.php?method=xml&key=null&code=".$code_colissimo."&width=190&font=Arial&t=1253811351937" ;
        curl_setopt($ch, CURLOPT_USERAGENT, $agent);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_URL, $url_de_colissimo_suivi);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_REFERER, $ref);
        $data = curl_exec($ch);
    
       /* cURL va renvoyer du xml qui sera formaté de cette manière :
    
    	< ?xml version='1.0' ?>
    
    	< ![CDATA[1]]>
    	< ![CDATA[9A00092239388]]>
    	< ![CDATA[Particulier]]>
    	< ![CDATA[22/07/2010]]>
    	< ![CDATA[Votre colis est livré]]>
    	<base_label>< ![CDATA[Coliposte]]>
    								< ![CDATA[http://www.coliposte.net/particulier/suivi_particulier.jsp?colispart=xxxxxxxxxxxxxxxxxxxx]]>
    	< ![CDATA[]]>
    */
    
    // ça sera de l'UTF-8, utiliser utf8_decode si votre page est en ISO*/
    
    $sxml = simplexml_load_string($data);
    $message_du_xml = $sxml->message;
    $date_du_xml = $sxml->date;
    $colissimo_message = utf8_decode($message_du_xml);
    $colissimo_date = utf8_decode($date_du_xml) ;
    echo $colissimo_date;
    echo $colissimo_message;
    
    ?>

    ce code vous sera très utile pour un site de e-commerce.

    Grand maître L

  • Afficher un message en fonction de l’heure et du jour de la semaine en PHP

    Bonjour,

    Grace à ce petit script vous allez pouvoir afficher un message en fonction de la date et de l’heure de votre présence.

    <?php
    
    function planning(array $planningDesFermetures, $heureOuverture, $heureFermeture) {
    
        $heureOuverture = 8; //sert à afficher le script à partir de 9h et non 8h
        $heureFermeture = 20; //sert à afficher le script à partir de 21h
    
        $heureActuelle = date('H', time());
        $jourActuel    = date('w', time());
    
        $planningDesFermetures = array(0, 6); //dans ce tableau on sélectionne les jours de 0 à 6 (lundi au vendredi)
    
        if ((in_array($jourActuel, $planningDesFermetures)) || ( $heureActuelle <= $heureOuverture) || ( $heureActuelle >= $heureFermeture)) {
            echo "C'est fermé ! ";
        } else {
            echo "C'est ouvert";
        }
    }
    
    

    Grand maitre L

  • Un code source PHP pour sauvegarder votre base de donnée MySQL

    Voici un code source fonctionnel pour sauvegarder l’intégralité de votre base de donnée Mysql.

    
    <?php
    ################################################################################
    # L'auteur a autorisé la redistribution gratuite et l'inclusion de ce code dans
    # les programmes à condition que cette notice de copyright soit dûment incluse.
    # BackySQL (c)  2010 Brice Sanchez
    # 10/03/2010 Brice SANCHEZ - www.brice-sanchez.com
    #
    # LE CODE COUVERT PAR CETTE LICENCE EST FOURNI « EN L'ÉTAT »,
    # SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU IMPLICITE, INCLUANT,
    # SANS S'Y LIMITER, LES GARANTIES D'ABSENCE DE DÉFAUT, DE QUALITÉ MARCHANDE,
    # D'ADÉQUATION À UN USAGE PARTICULIER OU DE NON-VIOLATION DE DROITS DE TIERCES
    # PARTIES. VOUS ASSUMEZ TOUS LES RISQUES LIÉS À LA QUALITÉ ET AUX PERFORMANCES
    # DU CODE COUVERT PAR CETTE LICENCE. SI UN DÉFAUT, QUEL QU'IL SOIT, EST DÉTECTÉ
    # DANS LE CODE COUVERT PAR CETTE LICENCE, VOUS (ET NON LE DÉVELOPPEUR INITIAL
    # OU UN CONTRIBUTEUR) ASSUMEZ LE COÛT DES SERVICES D'ASSISTANCE, DES RÉPARATIONS
    # OU DES CORRECTIONS NÉCESSAIRES. CETTE LIMITATION DE GARANTIE CONSTITUE UNE
    # PARTIE ESSENTIELLE DE CETTE LICENCE. LE CODE COUVERT PAR CETTE LICENCE NE PEUT
    # ÊTRE UTILISÉ QUE DANS LE CADRE DE CETTE LIMITATION DE GARANTIE.
    # Vous utilisez ce code à vos propres risques.
    ################################################################################
    ////////////////////////////////////////////////////////////////////////////////
    // @Description
    //  Sauvegarde de base de donnée
    // @Version				0.6
    // @Licence				GNU/GPL3
    //  http://www.gnu.org/licenses/gpl-3.0.html
    // @Publication				Vendredi 12 Mars 2010
    // @Revision				Samedi 13 Mars 2010
    // @Catgorie				Administration
    // @Compatibilite			PHP 4 >= 4.0.1, PHP 5
    // @Auteur				Brice Sanchez
    //  http://www.brice-sanchez.com/
    // @Contributeur			Flashx
    // @Contact
    // @Télechargement
    //  http://www.siteduzero.com/forum-83-498153-p1-sauvegarde-automatique-de-la-base-de-donnee-mysql.html#r4753068
    // @Note
    //  Utiliser un cron job toute les 24 h vers 3heure du matin
    //
    // @changement
    //  Support la sauvegarde de DB differente
    //  Windows compatibility
    //  check config
    //
    // Remerciement
    //  * à M@teo pour héberger gracieusement nos sources,
    //  * à Brice pour l'élan communautaire qu'il a su ranimer,
    //  * aux développeurs de siteduzero.com pour leurs conseils( notamment Sebi57)
    ////////////////////////////////////////////////////////////////////////////////
    
    ////////////////////////////////////////////////////////////////////////////////
    // Configuration
    ////////////////////////////////////////////////////////////////////////////////
    //TODO : céer un object de configuration( ajouter un nom a cette config, donner plus d'option)
    // inclure la configuration : pas de C/C
    
    // Nom de la base de donnée à enregistrer
    $nom_bdd = 'test' ;
    
    // Hôte de la base de donnée ciblé
    $hote = 'localhost' ;
    
    // Port de la base de donnée
    $port = '3306' ;
    
    // Nom d'utilisateur de la base de donnée à enregistrer
    $utilisateur = 'root' ;
    
    // Mot de passe de la base de donnée à enregistrer
    $mot2passe = '' ;
    
    // Exemple : latin1 ou utf8
    $encodage_caracteres_mysql = 'latin1' ;
    
    // Remplir le tableau si on veut sauvegarder uniquement certaines tables
    // Exemple : array('table1','table2','table5')
    $selection_tables_mysql = array();
    
    // Chemin absolu de l'emplacement du site
    $chemin_absolu_site = dirname( __FILE__) . DIRECTORY_SEPARATOR;
    
    // Emplacement sur le FTP du répertoire des sauvegardes
    $repertoire = 'sauvegarde_mysql';
    
    // Nom du fichier ( ex : nomdelabasededonnee_2010-03-01_01-01-01.sql)
    $ext_fichier = 'sql' ;
    
    // Nombre de sauvegardes à garder sur le FTP
    $nbre_sauvegardes_a_garder = 7 ;
    
    define( "CHECK", true);
    define( "FIRST_RUN", true);
    
    ////////////////////////////////////////////////////////////////////////////////
    // Initialisation
    ////////////////////////////////////////////////////////////////////////////////
    $repertoire_sauvegardes = $chemin_absolu_site . $repertoire.DIRECTORY_SEPARATOR;
    
    $nom_fichier = $nom_bdd.'_'.date('Y-m-d_H-i-s').'.'.$ext_fichier ;
    
    ////////////////////////////////////////////////////////////////////////////////
    // Vérification de l'environnement
    ////////////////////////////////////////////////////////////////////////////////
    if( true == CHECK)
    {
    $sapi_type = php_sapi_name();// Context d'execution
    
    if (substr($sapi_type, 0, 3) != 'cli') {
    if( true == FIRST_RUN)
    {
    ?><html><body>
    <p>Il semblerai que vous souhaitez utiliser ce fichier a travers le reseaux.<br/>
    <p>Si tel est votre souhais, Pensez à :
    <ul>
    <li>Autentifier l'attaquant;</li>
    <li>Identifier l'attaquant;</li>
    <li>Modifier périodiquement vos codes d'acces.</li>
    </ul></p>
    </body></html><?php
    }
    exit( );
    }
    if( is_dir ($repertoire_sauvegardes) === FALSE ) {
    if(mkdir ($repertoire_sauvegardes, 0700) === FALSE ) {
    exit('Impossible de créer le répertoire de sauvegarde'.PHP_EOL);
    // TODO : Indiquer une solution
    }
    } else if( is_writable( $repertoire_sauvegardes)===FALSE) {
    exit('Impossible d\'écrire dans le répertoire de sauvegarde'.PHP_EOL);
    // TODO : Indiquer une solution
    }
    
    // tester la connexion Mysql;
    // Que ce passe t-il si MySQL n'est pas en TCP mais en socket file ?
    // Optimiser le mode de compatibilité mysql( interoger mysql)
    // Que ce pass t'il si on se plante dans le nom des table $selection_tables_mysql( interoger mysql)
    }
    
    ////////////////////////////////////////////////////////////////////////////////
    // Sauvegarde de la base de donnée
    ////////////////////////////////////////////////////////////////////////////////
    
    $commande  = 'mysqldump';
    $commande .= ' --host='.$hote;
    $commande .= ' --port='.$port;
    $commande .= ' --user='.$utilisateur;
    $commande .= ' --password='.$mot2passe ;
    $commande .= ' --skip-opt';
    $commande .= ' --compress';
    $commande .= ' --add-locks';
    $commande .= ' --create-options';
    $commande .= ' --disable-keys';
    $commande .= ' --quote-names';
    $commande .= ' --quick';
    $commande .= ' --extended-insert';
    $commande .= ' --complete-insert';
    $commande .= ' --default-character-set='.$encodage_caracteres_mysql;
    $commande .= ' --compatible=mysql40';
    $commande .= ' --result-file='.$repertoire_sauvegardes.$nom_fichier ;
    $commande .= ' '.$nom_bdd ;
    
    if( !empty($selection_tables_mysql) ) {
    $commande .= ' '.implode(' ',$selection_tables_mysql) ;
    }
    
    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    // WARNING
    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    // a REVOIR, exec() serrai plus mieux ????????????????
    // Execution de la commande de sauvegarde
    system($commande) ;
    
    // Compression au format GZIP du fichier sauvegardé
    system('cd '.$repertoire_sauvegardes.'; gzip '.$nom_fichier) ;
    // $] gzip: test_2010-03-13_02-31-16.sql.gz already exists; do you wish to overwrite (y or n)?
    // et il me crée *.sql sans le gziper
    // donc verifier les erreur retourner par systeme
    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    // WARNING
    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    
    //TODO choix de la destination de la sauvegarde sur FTP
    
    // Initialisation des variables
    $tableau_sauvegardes = array();
    
    // Ouverture du dossier, Attention au cache du filesysteme???
    if ($repertoire_ouvert = opendir($repertoire_sauvegardes)) {
    // Lecture des entrées
    while( ($fichier_en_cours = readdir($repertoire_ouvert)) !== false) {
    if(is_file($repertoire_sauvegardes.$fichier_en_cours)) {
    if( substr( $fichier_en_cours, 0, strlen( $nom_bdd))!=$nom_bdd ) {
    continue;//
    }
    // Mise en tableau des résultats
    $tableau_sauvegardes[] = $fichier_en_cours;
    }
    }
    // fermeture du dossier
    closedir($repertoire_ouvert) ;
    }
    
    sort($tableau_sauvegardes, SORT_STRING);
    
    // Supprime les fichiers en trop
    $ln = sizeof( $tableau_sauvegardes)-( $nbre_sauvegardes_a_garder-1);
    for($i=0; $i<$ln; $i++) {
    unlink($repertoire_sauvegardes.$tableau_sauvegardes[$i]);
    }
    
    ////////////////////////////////////////////////////////////////////////////////
    // Loger nos actions
    ////////////////////////////////////////////////////////////////////////////////
    //TODO, envoyer un mail : c'est rassurant
    

    Grand maître L