IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez / Téléchargez Sources et Outils PHP Discussion :

Vos meilleurs codes sources


Sujet :

Contribuez / Téléchargez Sources et Outils PHP

  1. #61
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Merci, je vais intégrer tout ça dès que possible !

    Vous avez le droit de me relancer de temps en temps par MP si ça traîne

  2. #62
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    Intercepter les erreurs jettées par un objet de class PEAR (renvoie d'objet PEAR_Error).
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    /**
     * Ce fichier contient seulement le décorateur de classe PEAR.
     * 
     * Crédits
     * <ul>
     * <li>Shrike@irc.freenode.net:##php (decorator pattern demonstration)</li>
     * </ul>
     */
    /**
     * <p>C'est une classe de type décorateur pour utiliser un objet PEAR.</p>
     * <p>Example :</p>
     * <code>
     * $mail_object = new PEAR_Decorator( Mail::factory('mail') );
     * $cool_object = new PEAR_Decorator( new Cool() );
     * // Les objets doivent ensuite être utilisés normalement
     * </code>
     */
    class PEAR_Decorator
    {
    /**
     * L'objet a décorer
     * @access          private
     * @var             object
     */
        private $o_decorated;
     
        public function __construct($o_decorated)
        {
            $this->o_decorated = $o_decorated;
        }
     
        public function __call($s_method, $a_arguments)
        {
            $ret = call_user_func_array(array($this->o_decorated, $s_method),
                                        $a_arguments);
            if($ret instanceof PEAR_Error)
            {
               // Ici vous pouvez traiter l'erreur PEAR
               // print_r($ret);
            }
            return $ret;
        }
    }

    A utiliser si vous voulez utiliser PEAR avec votre propre gestionnaire d'erreurs.
    Auteur : is_null
    YourLabs Business Service: Conseil en Strategie Numerique / Club de 1337 Haxors depuis 2012 / Marque de Logiciels Libres / Blog / GitHub /
    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

  3. #63
    Membre habitué
    Inscrit en
    Juillet 2003
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 196
    Points : 165
    Points
    165
    Par défaut Classe table html dynamique
    Bonjour,

    Créez et modifiez des tables HTML dynamiquement (v1.51 du 10/03/2010)

    Class_table_html.zip

    Visionner la doc dans l'archive.

  4. #64
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 948
    Points : 719
    Points
    719
    Par défaut
    chargement automatique des classes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     function __autoload($class_name) {
        $path = str_replace('_', '/', $class_name);   
        require_once $path . '.php';
    }
    (marche avec le ZF (et pear, si je ne me trompe pas...?))


    rediriger les erreurs PHP en levée d'exeption :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    function errorHandler($errno, $errstr, $errfile, $errline)
    {
    	$error = "Erreur : $errno cause :$errstr, à la ligne $errline, dans le fichier $errfile";
     
    	switch ($errno) 
    	{
    	case E_ERROR:
    		throw new Exception_PHP ("erreur".$error);
    	  break;
    	case E_WARNING:
    		throw new Exception_PHP ("warning".$error);
    	  break;
    	case E_NOTICE:
    		throw new Exception_PHP("notice".$error);
    	  break;
    	default:
    		throw new Exception_PHP("default".$error);
    	break;
    	}
    }
     
    set_error_handler("errorHandler");
    c'est du brut de brut, mais, on peut facilement le rendre tres utile (bon, ok c'est pas les codes les plus nouveaux du monde...)

  5. #65
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    Je confirme que la fonction __autoload() présentée fonctionne parfaitement avec PEAR.
    D'ailleurs, je propose de créer une section OOP5, pour y ranger __autoload() ainsi que les contribuations du genre concept/design pattern si elles en valent la peine, c'est vrai qu'on s'amuse bien depuis qu'on n'a plus à se soucier du passage par référence ... Toutefois, merci de ne pas ajouter la suivante tant que je n'y ai pas ajouté la doc.

    Registre avec initialisation paresseuse

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    class basicRegistry {
      private static $instance = null;
      protected $registry = array();
     
      public static function instance() {
        if ( ! self::$instance ) {
          self::$instance = new ezCmsRegistry();
        }
        return self::$instance;
      }
     
      public function __get( $key ) {
        if ( !isset( $this->registry[$key] ) ) {
          $method = 'get'.ucfirst($key);
          $this->registry[$key] = $this->$method();
        }
        return $this->registry[$key];
      }
     
      public function __set( $key, $value ) {
        return $this->registry[$key] = $value;
      }
     
      // vos functions
    }

    Example concret, utilisé dans le cas d'un systême MVC avec action, et eZ components :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    class ezcShopRegistry {
      private static $instance = null;
      protected $registry = array();
     
      public static function instance() {
        if ( ! self::$instance ) {
          self::$instance = new ezCmsRegistry();
        }
        return self::$instance;
      }
     
      public function __get( $key ) {
        if ( !isset( $this->registry[$key] ) ) {
          $method = 'get'.ucfirst($key);
          $this->registry[$key] = $this->$method();
        }
        return $this->registry[$key];
      }
     
      public function __set( $key, $value ) {
        return $this->registry[$key] = $value;
      }
     
     
      private function getLog() {
        $log = ezcLog::getInstance();
        $writer = new ezcLogDatabaseWriter( $db, "log" );
        $log->getMapper()->appendRule(
          new ezcLogFilterRule( new ezcLogFilter, $writer, true )
        );
        return $log;
      }
     
      public function getAction() {
        $action = (string)$this->query['action']['name'];
        return new $action( $this->query['action'] );
      }
     
      private function getQuery() {
        $url = new ezcUrl( $_SERVER['REQUEST_URI'] );
        $query = $url->getQuery();
        if ( !isset( $query['action']['name'] ) ) {
          $query['action'] = array(
            'name' => 'ezCmsObjectLister',
            'model' => 'ezcShopCategory',
            'orderWay' => 'ASC',
            'orderField' => 'id',
            'page' => 1,
            'displayPerPage' => 12,
          );
        }
        return $query;
      }
     
      private function getRoot() {
        return $this->config->getSetting( 'config', 'php', 'root' );
      }
     
      private function getTranslator() {
        $cacheObj = new ezcCacheStorageFileArray(
          $this->root
          . $this->config->getSetting( 'config', 'translation', 'cache_path' )
        );
        $backend = new ezcTranslationCacheBackend( $cacheObj );
        return new ezcTranslationManager( $backend );
      }
     
      private function getConfig() {
        $config = ezcConfigurationManager::getInstance();
        $config->init( 'ezcConfigurationIniReader', ROOT.'/config' );
        return $config;
      }
     
      private function getSession() {
        $persistentSession = new ezcOverloadedPersistentSession(
          ezcDbInstance::get(),
          $this->persistentcodemanager
        );
        ezcPersistentSessionInstance::set( $persistentSession ); // set default session
        return $persistentSession;
      }
     
      private function getPersistentcodemanager() {
        return new ezcOverloadedPersistentCodeManager(
          $this->root . $this->config->getSetting( 'config', 'pos', 'base' )
        );
      }
     
      private function getSignals() {
        return new ezcSignalCollection();
      }
     
      private function getConverter() {
      }
     
      private function getLocale() {
        return 'en_US';
        if ( isset( $_GET['locale'] ) ) {
          return $_GET['locale'];
        }
        return $this->config->getSetting( 'config', 'general', 'default_locale' );
      }
     
      public function setUpDbHandler() {
     
      }
     
      public function getDb() {
        $db = ezcDbFactory::create (
          $this->config->getSetting( 'config', 'db', 'dsn' )
        );
        ezcDbInstance::set( $db );
        return $db;
      }
    }

    Usage :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $registre = ezcShopRegistry::instance();
    $db = $registre->db; // instancie db automatiquement de manière parresseuse si nécéssaire

    Explications :
    C'est d'abord un registre classique, avec une variable tableau pour y stocker ses variables ou objets.
    J'ai choisis l'instance parce qu'ainsi, __get() permet une initialisation paresseuse.
    C'est-à-dire que je peux librement acceder à $registre->db, et si $registre->registry[db] n'existe pas, la valeur de $registry->getDb() est automatiquement assignée.
    Ainsi, les objets sont initialisés just-in-time (juste-à-temps), et ceux qui n'auront pas été utilisés dans le script n'auront pas été instanciés.
    Le second avantage est la paresse : les objets et variables sont automatiquements instanciés avec leurs configurations respective sans avoir à appeler __set(), dans laquelle on pourrait simplement jeter une erreur.
    De toutes façons, j'évite les classes statiques autant que je peux.
    YourLabs Business Service: Conseil en Strategie Numerique / Club de 1337 Haxors depuis 2012 / Marque de Logiciels Libres / Blog / GitHub /
    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

  6. #66
    Membre éclairé Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Points : 876
    Points
    876
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    function smail($to, $sujet, $msg, $from, $pattern = false) {
    	$fmail = dirname(__FILE__).'/mail/' . $msg;
    	if (is_file($fmail) && is_array($pattern)) {
    		foreach ($pattern as $key => $output) {
    			$base[] = $key;
    			$bnew[] = $output;
    		}
    		$fd = @fopen($fmail, "r");
    		while (!feof($fd)) {
    			$line = fgets($fd, 2048);
    			$content .= str_replace($base, $bnew, $line);
    		}
    		fclose($fd);
    	} else {
    		$content = $msg;
    	}
     
    	mail($to, $sujet, $content,
    		"From: $from\r\n"
    		."Reply-To: $from\r\n"
    		."X-Mailer: PHP/" . phpversion());	
    }
    Voilà une fonction que j'ai faite pour me simplifier l'envoi de mail.
    Il vous suffit de créer un dossier "mail" contenant des fichiers types, par exemple join.mel contenant votre message et de mettre dedans des mot clef qui seront remplacés par $pattern.

    Exemple :

    Votre fichier hello.mel :

    Votre code source :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $pattern['PSEUDO'] = '|PaRa-BoL';
    smail($email, 'Bonjour', 'hello.mel', 'hello@monsite.com', $pattern);
    Dans le cas ou le fichier n'est pas trouvé, le mail sera envoyé contenant le message $msg.

  7. #67
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    Je propose une simplification du code.
    Notez qu'il est inutile de saisir un Reply-To égal au From.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    function smail($to, $sujet, $msg, $from, array $pattern = array()) {
    	$fmail = dirname(__FILE__).'/mail/' . $msg;
    	if (is_file($fmail) && $pattern ) {
    		$fd = @fopen($fmail, "r");
    		while (!feof($fd)) {
    			$line = fgets($fd, 2048);
    			$content .= str_replace( array_keys( $pattern ), array_values( $pattern ), $line);
    		}
    		fclose($fd);
    	} else {
    		$content = $msg;
    	}
     
    	mail($to, $sujet, $content,
    		"From: $from\r\n"
    		."X-Mailer: PHP/" . phpversion());	
    }
    Néanmoins, je ne peux que recommander aux programmeurs d'utiliser une classe de génération de mails plus complête comple PEAR::Mail_Mime, qui permet de créer un mail plus facilement tout en offrant de nombreuses fonctionnalités additionnelles.
    Il est déjà poli de fournir une version texte du message en plus d'une version HTML, aussi est-il relativement complexe de gérer des attachement sans classe du genre de PEAR::Mail_Mime.
    Aussi, attention au null byte avec cette fonction, elle est exploitable si $msg provient d'input.
    YourLabs Business Service: Conseil en Strategie Numerique / Club de 1337 Haxors depuis 2012 / Marque de Logiciels Libres / Blog / GitHub /
    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

  8. #68
    Membre éclairé Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Points : 876
    Points
    876
    Par défaut
    Merci d'avoir simplifier la function
    Evidement $msg ne devrais jamais provenir de données extérieurs

    (Tu as mi un str_replace en trop)

  9. #69
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut Créer un mot de passe
    Créer un mot de passe

    Bonjour à tous,

    Voici une fonction que j'utilise pour créer un mot de passe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    // Créer un mot de passe =============================
    function Make_Pass($n){
     
    $Lettre1 = "AaBbCcDdEeFfGgHhIiJjKkLMmNnPpQqRrSsTtUuVvWwXxYyZz";
    $Lettre2 = "AaBbC_cDdEeFfGgHhIiJ?jKkLMmN!nPpQqRrS+sTtUuVv-WwXxYyZz";
     
    // il n'y a volontairement pas les caractères o ou O , et l (L minuscule)
    //pour qu'il n'y ait pas de confusion avec le 0 (zéro) et le o  ou O
    // et l (L minuscule) et le 1 
     
    $i = 0;
    $a = rand(0,strlen($Lettre1));
    $ThePass = substr($Lettre1, $a, 1); // le premier caractère sera une lettre
     
    // les n autres caractères - 1 (le premier)
    while($i < ($n-1)){ 
      $X = rand(0,strlen($Lettre2));
     
      // tableau pour les chiffres
      //mettez autant d'éléments dans le tableau que vous voulez. 
      //un élément ne peut pas être supérieur à strlen($Lettre2)
      $Xarray = array(2,17,21,38,45,50); 
     
      // si $X n'est pas dans le tableau : ce sera une lettre
      if(!in_array($X, $Xarray)){
      $ThePass.= substr($Lettre2, $X, 1);}
     
      else{ // sinon ce sera un chiffre
      $Y = rand(0,9);
      $ThePass.= $Y;}
     
      $i++;
      }
     
     return $ThePass;
     }
    //-------------------------------------------------------
    La fonction est appelée comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $password = Make_Pass(10); // pour 10 caractères

  10. #70
    Membre éclairé Avatar de haltabush
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    726
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 726
    Points : 835
    Points
    835
    Par défaut
    Générer un mot de passe (bis)

    Je ne comprends pas trop ta méthode, N1Bus... Pour ma part, je me contente de ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function passGenerator($nbCarMax){
        //Caractères autorisés
        //On retire 0, O, I, 1 et l pour éviter les confusions
        $chaine = "abcdefghjkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789-_.";
        $pass = "";
        $maxChars = strlen($chaine);
        for($i =0; $i < $nbCarMax; $i++) {
            //on compte le nombre de caractères présents dans notre chaine
            // on choisie un nombre au hasard entre 0 et le nombre de caractères de la chaine
            $nb = mt_rand(0,($maxChars -1));
            // on ajoute la lettre a la valeur de $pass
            $pass.=$chaine[$nb];
        }
        return $pass;
    }

  11. #71
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    Je ne comprends pas trop ta méthode, N1Bus
    C'est vrai que je me suis compliqué un peu la vie...

    Note : J'avais quand même besoin que le mot de passe commence par une lettre.

  12. #72
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    function passGenerator($nbCarMax)
    {
        //Caractères autorisés : On retire 0, O, I, 1 et l pour éviter les confusions
        $chaine_alpha = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";
        $chaine_autres = "23456789-_.";
        $chaine = $chaine_alpha.$chaine_autres;
     
        $pass = "";
        for($i =0; $i < $nbCarMax; $i++) 
        {
    	if ($i==0) $maxChars = strlen($chaine_alpha);
           else $maxChars = strlen($chaine);
     
            // on choisie un nombre au hasard entre 0 et le nombre de caractères de la chaine
            $nb = mt_rand(0,($maxChars -1));
            // on ajoute la lettre a la valeur de $pass
            $pass.=$chaine[$nb];
        }
        return $pass;
    }
    Et voilà : le premier caractère est un chiffre

  13. #73
    Membre éclairé Avatar de haltabush
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    726
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 726
    Points : 835
    Points
    835
    Par défaut
    Gérer magic_quotes_gpc de manière transparente:

    Ca évite de se fatiguer à vérifier la configuration du serveur à chaque fois. J'imagine qu'on a tous ce genre de fonction en stock, mais au cas où il y a des fainéants qui ne veulent pas écrire ces quelques lignes ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function filtrePostToSql($str){
        if (get_magic_quotes_gpc()){
            return mysql_real_escape_string(stripslashes($str));
        }else{
            return mysql_real_escape_string($str);
        }
    }

  14. #74
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    http://fr2.php.net/magic_quotes
    Personnelement, je prefere utiliser un code qui permet de s'en debarasser de maniere transparente sur tout le script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
    if (get_magic_quotes_gpc()) {
        function stripslashes_array($array) {
            return is_array($array) ? array_map('stripslashes_array', $array) : stripslashes($array);
        }
     
        $_COOKIE = stripslashes_array($_COOKIE);
        $_FILES = stripslashes_array($_FILES);
        $_GET = stripslashes_array($_GET);
        $_POST = stripslashes_array($_POST);
        $_REQUEST = stripslashes_array($_REQUEST);
    }
    ?>
    PS : j'ai corrige mon message precedent.
    YourLabs Business Service: Conseil en Strategie Numerique / Club de 1337 Haxors depuis 2012 / Marque de Logiciels Libres / Blog / GitHub /
    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

  15. #75
    Membre éclairé Avatar de haltabush
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    726
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 726
    Points : 835
    Points
    835
    Par défaut
    Ah oui, effectivement c'est mieux Merci!

  16. #76
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut Géolocalisation
    Placer des points sur une carte en coordonnées septentrionalles

    Pour tout programme ou il est nécessaire de placer des points ou des lignes sur une carte a partir des coordonnées Nord-sud-est-ouest.

    Auteur : Stéphane PETITCLERC
    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    Bonjour,

    Pour ma part, je vous propose une classe simple de "géolocalisation".
    Concrètement, on passe à la classe un fichier image (représentant une carte) en indiquant les coordonnées septentrionnalles du coin haut gauche de la carte ainsi que du coin bas droit, puis on appel la méthode DrawItem() pour dessiner un point sur la carte aux coordonnées septentrionnales passées en paramètre.

    Personnelement, j'ai développé cet outil pour publier des carte mémétorologique à partir des données du satellite QuickSat. L'extraction des données se faisant en C, je ne vous propose ici que le module d'affichage qui peut être réutiliser dans bien des situations (tracé de route, positionnement de points sur un carte, météorologie, trajets, etc...).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    <?php
    	class map
    	{
    		var $img;
    		var $lat_deb = 0;
    		var $lat_fin = 0;
    		var $lon_deb = 0;
    		var $lon_fin = 0;
     
    		// constructeur : créé l'iamge a partir de URL,
    		// lat_den/fin et lon_deb/fin sont les coordonnees du point au format numerique
    		function map($url_img, $lat_deb, $lat_fin, $lon_deb, $lon_fin)
    		{
    			$this->lat_deb = $lat_deb;
    			$this->lat_fin = $lat_fin;
    			$this->lon_deb = $lon_deb;
    			$this->lon_fin = $lon_fin;
     
    			// Création d'une ressource image à partir de la carte
    			$this->img = imagecreatefrompng($url_img);
    			if($this->img === false) return false;
    			return true;
    		}//*********************************************
     
     
    		// récupère les coordonnées en pixels du point passé en latitude/longitude.
    		// le résultat est renvoyé dans un tableau.
    		function GetCoordPixel($LAT, $LON, $force = 0)
    		{
    			if(!$force)
    			{  
    				if($LAT > $this->lat_fin || $LAT < $this->lat_deb) return false;
    				if($LON > $this->lon_fin || $LON < $this->lon_deb) return false;
    			}
    			$x = imagesx($this->img);
    			$y = imagesy($this->img);
     
    			$LATpixel = $y / ($this->lat_fin - $this->lat_deb);
    			$LONpixel = $x / ($this->lon_fin - $this->lon_deb);
     
    			$coordBasePixelLAT = ($this->lat_deb * $LATpixel) * -1;
    			$coordBasePixelLON = ($this->lon_deb * $LONpixel) * -1;
     
    			$X = $coordBasePixelLON + ($LONpixel * $LON);
    			$Y = $coordBasePixelLAT + ($LATpixel * $LAT);
     
    			return array(round($X), $y - round($Y));
    		}//*********************************************
     
    		// transforme une coordonnee du type 61.3W en -61.3 
    		function Coord($val)
    		{
    			$val = trim($val);
    			switch(substr($val, -1, 1))
    			{
    				case 'N' :
    				$val = substr($val, 0,  strlen($val) - 1);
    				break;
     
    				case 'S' :
    				$val = substr($val, 0,  strlen($val) - 1) * -1;
    				break;
     
    				case 'E' :
    				$$val = substr($val, 0, strlen($val) - 1);
    				break;
     
    				case 'W' :
    				$val = substr($val, 0,  strlen($val) - 1) * -1;
    				break;
     
    				default:
    				return false;
    				break;
    			}
    			if(is_numeric($val)) return $val;
    			return false;
    		}//*********************************************		
     
    		// Dessine l'objet $item (couleur RVB 0-255) aux coordonnées X-Y (en °)
    		function DrawItem($x, $y, $item = '', $R = 255, $V = 0, $B = 0)
    		{
    			if(!is_numeric($x)) { $x = $this->Coord($x); if(!is_numeric($x)) return false; }
    			if(!is_numeric($y)) { $y = $this->Coord($y); if(!is_numeric($y)) return false; }
    			if(!is_numeric($R) || !is_numeric($V) || !is_numeric($B)) return false;
     
     
    			// création de la couleur de l'objet
    			$tmpcolor = imagecolorallocate($this->img, $R, $V, $B);
     
    			list($x, $y) = $this->GetCoordPixel($x, $y);
     
    			switch($item)
    			{	
    				default:
    					imagefilledellipse($this->img, $x, $y, 5, 5, $tmpcolor);
    				break;
    			}
    		}//*********************************************
     
     
    		function DrawLine($x, $y, $to_x, $to_y, $R = 255, $V = 0, $B = 0)
    		{
    			if(!is_numeric($x)) { $x = $this->Coord($x); if(!is_numeric($x)) return false; }
    			if(!is_numeric($y)) { $y = $this->Coord($y); if(!is_numeric($y)) return false; }
    			if(!is_numeric($to_x)) { $to_x = $this->Coord($to_x); if(!is_numeric($to_x)) return false; }
    			if(!is_numeric($to_y)) { $to_y = $this->Coord($to_y); if(!is_numeric($to_y)) return false; }
     
    			if(!is_numeric($R) || !is_numeric($V) || !is_numeric($B)) return false;
     
    			// création de la couleur de l'objet
    			$tmpcolor = imagecolorallocate($this->img, $R, $V, $B) or die();
     
    			list($x, $y) = $this->GetCoordPixel($x, $y, true);
    			list($to_x, $to_y) = $this->GetCoordPixel($to_x, $to_y, true);
     
    			imageline($this->img, $x, $y, $to_x, $to_y, $tmpcolor);
     
    		}//*********************************************
     
     
    		// renvoie l'image sous forme de ressource graphique
    		function GetImage()
    		{
    			return $this->img;
    		}//**********************************************
     
    	}
    ?>
    Vous pouvez ré-écrire la fonction DrawItem pour dessiner autre chose que des points sur la carte (et drow line pour les lignes).

    Les coordonnées à passé en paramètre peuvent s'écrire de 2 façons :
    DrawItem('16.1N', '61W'); ou encore DrawItem(16.1, -61);


    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $carte = new map('./zoom.png', -10, 10, -5, 5);
    $carte->DrawItem(16, -61, '', 255, 0, 0);
    header('Content-Type: image/jpg');
    imagejpeg($carte->GetImage());
    Les images doivent être au format PNG (modifiez le constructeur pour prendre d'autre type).
    Si vous avez un message d'erreur, n'oubliez pas de le lire, la réponse à votre problème est surement dedans !

  17. #77
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Webshare, explorateur webFTP
    Webshare, explorateur webFTP

    Auteur : Virginie Vivancos

    Lien vers le site officiel : http://www.webshare.fr
    Démo : http://www.webshare.fr/demo
    Forum : http://www.webshare.fr/?page=forum

    Avec Webshare, vous pouvez profiter de tous vos documents et les gérer directement sur votre espace web depuis n'importe quel ordinateur, et ce, en toute convivialité! Vous pouvez également partager vos fichiers, transférer des documents volumineux, le tout en quelques clics !

    Cette application open-source écrit en PHP/Ajax se présente comme un explorateur classique (documents sous forme d’icônes, arborescence et menu contextuel). Ne nécessitant pas de configuration complexe, Webshare v0.6 fonctionne sur tout navigateur récent et propose les fonctionnalités suivantes :

    * Affichage et navigation :
    o Vues par miniatures, icônes, liste, détails ;
    o Tri par nom, valeur, type, date, taille ;
    o Aperçu des images et des liens (miniatures) ;
    o Visualisation directe des images et autres fichiers de type connu ;
    o Lecture directe des fichiers audio MP3 depuis un lecteur intégré ;
    o Recherche par nom ;
    o Ajout de commentaires (dossier ou fichier) ;
    o Affichage des propriétés et des données exif ;
    o Zoom sur les images à l’aide de la souris ;
    o Lecture directe des flux RSS.

    * Gestion de fichier :
    o Création, modification, renommage, suppression, copie, déplacement et verrouillage ;
    o Glisser-déplacer (limité actuellement à un seul fichier à la fois) ;
    o Upload et download d’un ou plusieurs documents simultanément (par zippage) ;
    o Gestion des uploads dans une file d’attente avec démarrage automatique ;
    o Support des noms fichiers accentués ou contenant des caractères internationaux.

    * Accès, comptes et sécurité :
    o Accès public ou restreint par identification (géré par l’administrateur uniquement) ;
    o Nombre potentiellement illimité de partages et d’utilisateurs avec paramétrage particulier pour chacun ;
    o Chaque action de l’utilisateur peut être autorisée, restreinte ou interdite par l’administrateur ;
    o Filtre d’expressions interdites pour empêcher l’accès et la gestion de fichiers sensibles (scripts PHP, CGI, etc.) ;
    o Stockage protégé des informations d’identifications sensibles, fonctions serveurs sécurisées.

    * Interface :
    o Personnalisation complète de l’affichage (création de nouvelles skins possible) ;
    o Paramétrage des boutons de souris ;
    o Possibilité d’éditer les fichiers textes et les pages HTML grâce à l’ajout de FCKeditor en tant que module.

  18. #78
    Membre confirmé
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 397
    Points : 518
    Points
    518
    Par défaut [Regex] Retrouver tous les liens relatifs d'une page
    Récupère le flux HTML d'une page et insère dans un tableau tous les liens relatifs.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $subject = file_get_contents($file);
     
    $pattern = '`href="([^#]*?)(?<!http)"`i';
     
    $arRelativeLinks = array();
    preg_match_all($pattern, $subject, $matches);
    {
    	foreach($matches[1] as $link)
    	 $arRelativeLinks[] = $link;
    }
     
    //j'ai exclu les liens de type href="#"
    Zend PHP5 Certification
    MySQL 4 Core Certification

  19. #79
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Une petite class pour vos entêtes du moins une idée de départ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <?php
    class sendHeaderStatus{
    	/**
    	 * function send status header
    	 *
    	 * @param void $statusCode
    	 * @return header
    	 */
    	    function sendStatusCode($statusCode){
     
    		   return header(' ', true, $statusCode);
    		}
     
          /**
            * function redirectionErreur404() get error 404
            * with params
            *
            * @param : void
            * @return : void
            */
     
          function redirectionErreur404(){
     
    	      return self::sendStatusCode(404);
          }
          /**
            * function redirectionErreur403() get error 403
            * with params
            *
            * @param : void
            * @return : void
            */
     
          function redirectionErreur403(){
     
          	return self::sendStatusCode(403);
          }
    }
          ?>
    Je vous joins aussi un plugin que j'ai fais pour smarty et qui mérite un partage
    Fichiers attachés Fichiers attachés
    Au petit déjeuner, je prend du PHP et au souper du jQuery.
    AFUP 2009 : Bien optimiser son code pour le référencement
    Mon projet open source de librairie PHP 5: magix cjquery

  20. #80
    Membre habitué Avatar de Laskar
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2002
    Messages : 228
    Points : 139
    Points
    139
    Par défaut Listes chaînées (php + AJAX)
    Après avoir galéré longtemps pour comprendre le fonctionnement de ce truc, je propose un exemple illustrant le chaînage de trois listes déroulantes. Les scripts sont commentés. J'utilise AJAX.
    Tout est dans le zip ci-joint.

    Have fun.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Page code source, mettez vos sources ici !
    Par gorgonite dans le forum Langages fonctionnels
    Réponses: 157
    Dernier message: 24/02/2013, 22h29
  2. Réponses: 21
    Dernier message: 18/11/2009, 16h08
  3. Réponses: 4
    Dernier message: 14/12/2008, 20h13
  4. Page Code Source, mettez vos codes ici
    Par Bovino dans le forum Contribuez
    Réponses: 8
    Dernier message: 05/12/2008, 12h11
  5. Ajouter des commentaire à vos codes-sources
    Par Zaki_SDwin dans le forum Contribuez
    Réponses: 6
    Dernier message: 17/06/2008, 00h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo