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 :

Compilation failed: unrecognized character [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 129
    Points : 57
    Points
    57
    Par défaut Compilation failed: unrecognized character
    Bonsoir à tous,

    voila, je viens de m'héberger chez free et lorsque j'essai d'afficher mon site qui était correctement affiché chez un autre hébergeur j'ai une erreur :


    Warning: preg_match_all() [function.preg-match-all]: Compilation failed: unrecognized character after (?< at offset 3 in /mnt/136/sdb/5/8/magiealacarte/navig.php on line 12


    Quelqu'un saurait t'il d'ou vient cette erreur ???

    Le scrit ci-dessous sert à detecter le navigateur et appeller une page de CSS ou une autre
    Sachant que mon code est: (la fameuse ligne 12 est en gras...)

    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
    
    <?php
    function browser_info($agent=null) {
    
      $known = array('msie', 'firefox', 'safari', 'webkit', 'opera', 'netscape',
        'konqueror', 'gecko');
    
      $agent = strtolower($agent ? $agent : $_SERVER['HTTP_USER_AGENT']);
      $pattern = '#(?<browser>' . join('|', $known) .
        ')[/ ]+(?<version>[0-9]+(?:\.[0-9]+)?)#';
    
    
      if (!preg_match_all($pattern, $agent, $matches)) return array();
    
    
      $i = count($matches['browser'])-1;
      return array($matches['browser'][$i]);
    }
    
    
    $ua = browser_info();
    
    
    
    
    if ($ua[0] == 'firefox') 
    {
    ?>
    
    
     <link rel="stylesheet" media="screen" type="text/css" title="acceuil" href="acceuilie.css" />
    
    
    
    <?php
    }
    else {
    ?>
    
    
     <link rel="stylesheet" media="screen" type="text/css" title="acceuil" href="acceuil.css" />
    
    <?php
    }
    ?>

  2. #2
    Membre averti
    Homme Profil pro
    Coordinateur développement web
    Inscrit en
    Août 2004
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Coordinateur développement web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2004
    Messages : 475
    Points : 412
    Points
    412
    Par défaut
    Bonjour,

    As tu regardé s'il s'agit de la même version de PHP entre les deux hébergeur ?

    @+

    Mic
    Toutes mes références en ligne : http://www.developpeur-web-php.fr

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 129
    Points : 57
    Points
    57
    Par défaut
    non, pourquoi ? j'utilise une fonction qui n'est pas compatible avec la version PHP de free ?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Que donne ton $pattern final ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 129
    Points : 57
    Points
    57
    Par défaut
    euh je ne sais pas trop,

    il faut dire que j ai récupéré un script et que j'ai essayé de l'adapter à ce que je voulais. cette variable à l air de ne servir de rien...

    mais si elle ne sert de rien, elle ne devrait pas etre responsable du bug non ?

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ba si elle sert, elle est en premiere position de ta fonction.
    Il faudrait que tu fasses un pour qu'on voit.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 129
    Points : 57
    Points
    57
    Par défaut
    voci le contenu de $pattern:

    #(?msie|firefox|safari|webkit|opera|netscape|konqueror|gecko)[/ ]+(?[0-9]+(?:\.[0-9]+)?)#

  8. #8
    Membre actif Avatar de Jihnn
    Inscrit en
    Décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 330
    Points : 273
    Points
    273
    Par défaut
    À quoi sert le ? tout juste après la première parenthèse ?
    Il manque probablement un caractère tout juste devant (?:, ?=, ?!, ?#, dépendamment de ce que vous cherchez à faire).

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 45
    Points : 55
    Points
    55
    Par défaut
    Salut,

    Citation Envoyé par Jihnn Voir le message
    À quoi sert le ? tout juste après la première parenthèse ?
    Il manque probablement un caractère tout juste devant (?:, ?=, ?!, ?#, dépendamment de ce que vous cherchez à faire).
    Le ? après la première parenthèse, ou plus exactement la chaîne "?<browser>" (et "?<version>") sert à nommé le groupe. Il est utilisé après :
    $matches['browser']

    La syntaxe me semble correcte et je viens de faire un test, c'est OK chez moi (pas la possibilité de tester chez free)


    Que ce passe t-il si tu remplaces :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $pattern = '#(?<browser>' . join('|', $known).')[/ ]+(?<version>[0-9]+(?:\.[0-9]+)?)#';

    par :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '#(' . join('|', $known).')[/ ]+(?<version>[0-9]+(?:\.[0-9]+)?)#';

    puis par :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '#(' . join('|', $known).')[/ ]+([0-9]+(?:\.[0-9]+)?)#';

    Tu auras d'autres erreurs, mais ce que je cherche à savoir là c'est si tu as encore des erreurs type "Compilation failed: unrecognized character"


    Cordialement,


    Kohntark-

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Citation Envoyé par documentation de preg_match
    5.2.2 Named subpatterns now accept the syntax (?<name>) and (?'name') as well as (?P<name>). Previous versions accepted only (?P<name>).
    Donc il faut rajouter le P entre ? et < pour des versions antérieures à 5.2.2 de PHP (à moins que PHP n'ait été (re)compilé avec une autre installation plus récente de PCRE >= 7.0 que celle qu'il inclut).

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 45
    Points : 55
    Points
    55
    Par défaut
    Merci pour cette info on ne peut plus précise.
    Je pensais également à ce problème de captures nommées, d'où les tests demandés, mais n'avais pas l'info.

    Reste plus qu'à modifier le script, ... ou changer d'hébergeur, ce qui serait tout de même plus sérieux

    Cordialement,


    Kohntark-

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 129
    Points : 57
    Points
    57
    Par défaut
    Merci beaucoup, ca fonctionne !!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/11/2009, 10h09
  2. [RegEx] Probleme dans ma regex : Compilation failed
    Par Seb33300 dans le forum Langage
    Réponses: 6
    Dernier message: 20/08/2009, 12h04
  3. Compilation failed in require at (eval X) line X.
    Par crocodile dans le forum SGBD
    Réponses: 3
    Dernier message: 17/04/2009, 09h13
  4. debutant: Compile failed
    Par Krishna dans le forum ANT
    Réponses: 1
    Dernier message: 18/07/2008, 20h23
  5. unrecognized character escape sequence
    Par beb30 dans le forum MFC
    Réponses: 15
    Dernier message: 16/05/2006, 15h55

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