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

Langage PHP Discussion :

Problème avec ereg_replace() [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 640
    Points : 408
    Points
    408
    Par défaut Problème avec ereg_replace()
    Bonjour,

    Je viens de terminer un site en PHP5. Un de mes scripts utilise l'opérateur instanceof, qui n'existe qu'en PHP5. Mon hébergeur (OVH) ne supporte pas PHP5 par défaut. J'ai créé un fichier .htaccess avec AddType x-mapp-php5 .php, sans résultat.

    D'autre part, j'utilise une classe de template, qui contient la boucle suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foreach ( $this->fields as $key => $value ) {
    // Remplacement des valeurs dans le modèle
    $result = ereg_replace ( "{".$key."}", $value,$this->content );
    // Initialisation du contenu du template
    $this->content = $result;
    }
    J'obtiens un warning et la page ne s'affiche pas :

    Warning: ereg_replace(): Invalid content of \{\} in /home.2/aiesecal/www/include/template.php on line 44

  2. #2
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Salut,

    Un de mes scripts utilise l'opérateur instanceof
    cool.

    J'ai créé un fichier .htaccess avec AddType x-mapp-php5 .php, sans résultat
    N'est ce pas la un problème de configuration qui n'à pas grand hcose à faire ici ?

    Warning: ereg_replace(): Invalid content of \{\} in /home.2/aiesecal/www/include/template.php on line 44
    Je croit que c'est clair et explicite. A vu de nez, et sans connaitre ereg, je dirais que $key est vide.


    Au fait, quelle est la question ?????


    bye

  3. #3
    Membre averti

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 640
    Points : 408
    Points
    408
    Par défaut
    Citation Envoyé par ePoX
    N'est ce pas la un problème de configuration qui n'à pas grand hcose à faire ici ?
    J'ai lu sur un forum qu'on pouvait utiliser cette solution pour éviter d'avoir à renommer tous les fichiers en .php5. J'ai finalement remplacé instanceof par la fonction is_a().

    Citation Envoyé par ePoX
    Je croit que c'est clair et explicite. A vu de nez, et sans connaitre ereg, je dirais que $key est vide.
    Non $key n'est pas vide. Comme ce script fonctionnait en local, je ne comprends pas ce qui se passe.

  4. #4
    Membre averti

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 640
    Points : 408
    Points
    408
    Par défaut
    Voici la classe complète :
    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
    class template {
       // Initialisation du constructeur template()
    	function template ( $path ) {
    		// Ouverture du modèle
    		$fp = @fopen ( $path, 'r' );
    		// Définition de l'attribut $content
    		$this->content = @fread ( $fp, @filesize ($path) );
    		// Fermeture du modèle
    		@fclose ( $fp );
    	}
     
    	// Initialisation de la méthode assign()
    	function assign ( $field, $value ) {
          // Ajout d'une ligne dans le tableau $fields
    		$this->fields[$field] = $value;
    	}
     
    	// Initialisation de la méthode parse()
    	function parse () {
    		// Parcours du tableau $fields
    		foreach ( $this->fields as $key => $value ) {
    			// Remplacement des valeurs dans le modèle
    			$result = ereg_replace ( "{".$key."}", $value,$this->content );
    			// Initialisation du contenu du template
    			$this->content = $result;
    		}
    	}
     
    	// Initialisation de la méthode display()
    	function display () {
    		// Affichage du template
    		echo $this->content; 
    	}
    }
    ?>

  5. #5
    Membre averti

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 640
    Points : 408
    Points
    408
    Par défaut
    J'ai essayé d'utiliser preg_replace() à la place de ereg_replace(). Le résultat est catastrophique.

  6. #6
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Je viens de psner, as tu installé php5 ?? juste au cas ou hein, ca c'est deja vu.

    Autrement en filant ton erreur à phpbugs il semble que la fonction soit un peu bugger qd mm :
    http://bugs.php.net/search.php?cmd=d...5C%7D&x=9&y=10

    Essaie de comparer ta version de php avec les resultats.

  7. #7
    Membre averti

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 640
    Points : 408
    Points
    408
    Par défaut
    La version de PHP est 4.4.2.

    Visiblement ereg_replace() est inutilisable. Comment utiliser preg_replace() à la place ? Dans mon template, je souhaite remplacer {content} par le contenu.

  8. #8
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Je t'avoue que je suis vraiment mauvais en regexp. Pourquoi ne pas utiliser str_replace à la place ? Qui plus est se sera plus rapide..

  9. #9
    Membre averti

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 640
    Points : 408
    Points
    408
    Par défaut
    Citation Envoyé par ePoX
    Je t'avoue que je suis vraiment mauvais en regexp. Pourquoi ne pas utiliser str_replace à la place ? Qui plus est se sera plus rapide..
    C'est ce que j'ai fait.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.1] problème avec ereg_replace
    Par Abou Zar dans le forum Langage
    Réponses: 2
    Dernier message: 10/05/2010, 11h26
  2. [RegEx] Problème avec ereg_replace
    Par erodatam dans le forum Langage
    Réponses: 1
    Dernier message: 14/03/2007, 14h57
  3. [RegEx] Problème avec la fonction ereg_replace
    Par Ceubex dans le forum Langage
    Réponses: 2
    Dernier message: 08/01/2007, 13h21
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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