Publicité
+ Répondre à la discussion
Page 4 sur 5 PremièrePremière 12345 DernièreDernière
Affichage des résultats 61 à 80 sur 97
  1. #61
    Rédacteur
    Avatar de Yogui
    Homme Profil pro Guillaume Rossolini
    Directeur technique
    Inscrit en
    février 2004
    Messages
    13 719
    Détails du profil
    Informations personnelles :
    Nom : Homme Guillaume Rossolini
    Localisation : France

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : février 2004
    Messages : 13 719
    Points : 29 152
    Points
    29 152

    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 Avatar de is_null
    Profil pro
    Djangonaute Linuxien
    Inscrit en
    octobre 2006
    Messages
    642
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations professionnelles :
    Activité : Djangonaute Linuxien

    Informations forums :
    Inscription : octobre 2006
    Messages : 642
    Points : 866
    Points
    866

    Par défaut

    Intercepter les erreurs jettées par un objet de class PEAR (renvoie d'objet PEAR_Error).
    Code php :
    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
    Blog / Github / StackOverflow

    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 : 132
    Points
    132

    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 chevronné Avatar de hansaplast
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2005
    Messages : 929
    Points : 609
    Points
    609

    Par défaut

    chargement automatique des classes :
    Code :
    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 :
    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 Avatar de is_null
    Profil pro
    Djangonaute Linuxien
    Inscrit en
    octobre 2006
    Messages
    642
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations professionnelles :
    Activité : Djangonaute Linuxien

    Informations forums :
    Inscription : octobre 2006
    Messages : 642
    Points : 866
    Points
    866

    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 :
    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 :
    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 :
    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.
    Blog / Github / StackOverflow

    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 émérite Avatar de |PaRa-BoL
    Inscrit en
    novembre 2003
    Messages
    736
    Détails du profil
    Informations personnelles :
    Âge : 27

    Informations forums :
    Inscription : novembre 2003
    Messages : 736
    Points : 829
    Points
    829

    Par défaut

    Code :
    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 :
    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 Avatar de is_null
    Profil pro
    Djangonaute Linuxien
    Inscrit en
    octobre 2006
    Messages
    642
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations professionnelles :
    Activité : Djangonaute Linuxien

    Informations forums :
    Inscription : octobre 2006
    Messages : 642
    Points : 866
    Points
    866

    Par défaut

    Je propose une simplification du code.
    Notez qu'il est inutile de saisir un Reply-To égal au From.
    Code :
    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.
    Blog / Github / StackOverflow

    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 émérite Avatar de |PaRa-BoL
    Inscrit en
    novembre 2003
    Messages
    736
    Détails du profil
    Informations personnelles :
    Âge : 27

    Informations forums :
    Inscription : novembre 2003
    Messages : 736
    Points : 829
    Points
    829

    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
    Rédacteur/Modérateur
    Avatar de N1bus
    Homme Profil pro Thierry Godin
    Dev. Web & OpenERP
    Inscrit en
    janvier 2003
    Messages
    2 787
    Détails du profil
    Informations personnelles :
    Nom : Homme Thierry Godin
    Âge : 50
    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 787
    Points : 5 276
    Points
    5 276

    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 :
    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 :
    1
    2
     
    $password = Make_Pass(10); // pour 10 caractères

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : avril 2005
    Messages : 726
    Points : 803
    Points
    803

    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 :
    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
    Rédacteur/Modérateur
    Avatar de N1bus
    Homme Profil pro Thierry Godin
    Dev. Web & OpenERP
    Inscrit en
    janvier 2003
    Messages
    2 787
    Détails du profil
    Informations personnelles :
    Nom : Homme Thierry Godin
    Âge : 50
    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 787
    Points : 5 276
    Points
    5 276

    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
    Expert Confirmé Avatar de Maxoo
    Profil pro Maxime Pasquier
    Expert PHP
    Inscrit en
    novembre 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Nom : Maxime Pasquier
    Âge : 31
    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 123
    Points : 2 613
    Points
    2 613

    Par défaut

    Code :
    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
    Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
    Mon espace Développez : mes Créations.


    Rencontre & Carte des Membres de Developpez.com, version 3.0

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : avril 2005
    Messages : 726
    Points : 803
    Points
    803

    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 :
    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 Avatar de is_null
    Profil pro
    Djangonaute Linuxien
    Inscrit en
    octobre 2006
    Messages
    642
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations professionnelles :
    Activité : Djangonaute Linuxien

    Informations forums :
    Inscription : octobre 2006
    Messages : 642
    Points : 866
    Points
    866

    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 :
    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.
    Blog / Github / StackOverflow

    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 émérite Avatar de haltabush
    Profil pro
    Développeur Web
    Inscrit en
    avril 2005
    Messages
    726
    Détails du profil
    Informations personnelles :
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : avril 2005
    Messages : 726
    Points : 803
    Points
    803

    Par défaut

    Ah oui, effectivement c'est mieux Merci!

  16. #76
    Membre expérimenté
    Inscrit en
    mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : mai 2002
    Messages : 673
    Points : 596
    Points
    596

    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 :
    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 :
    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).

  17. #77
    Invité régulier
    Inscrit en
    avril 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 6
    Points : 5
    Points
    5

    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 expérimenté
    Développeur Web
    Inscrit en
    avril 2005
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 30

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : avril 2005
    Messages : 397
    Points : 505
    Points
    505

    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 :
    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 éprouvé Avatar de gtraxx
    Homme Profil pro Aurélien Gérits
    Développeur Web
    Inscrit en
    mai 2006
    Messages
    1 045
    Détails du profil
    Informations personnelles :
    Nom : Homme Aurélien Gérits
    Âge : 32
    Localisation : Belgique

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

    Informations forums :
    Inscription : mai 2006
    Messages : 1 045
    Points : 494
    Points
    494

    Par défaut

    Une petite class pour vos entêtes du moins une idée de départ :
    Code :
    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 du Club
    Inscrit en
    mai 2002
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : mai 2002
    Messages : 159
    Points : 62
    Points
    62

    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •