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 :

Décomposer le chemin d'une URL [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif Avatar de CR_Gio
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 195
    Par défaut Décomposer le chemin d'une URL
    Bonsoir a tous,

    j'ai une url du type /folder/file.ext (folder pouvant representer une suite de sous repertoir )

    je souhaierais vérifier si cette URL verifie l'un des "motife" suivant :
    • /folder
    • /folder/
    • /a_file.php
    • /folder/.../folder
    • /folder/.../folder/
    • /folder/.../a_file.php


    et récuperer le chemin et le nom-de-base du fichier ( sans l'extension ) là est mon probleme ...

    J'ai essayé pas mal de chose, mais il doit y avoir encore des trucs qui m'échape.

    La premier chose sur laquel je bloque est de vérifier si l'URL fini par / ou .php et du coup , récuperer le reste de l'url
    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
    /*
    // motife valide :
    //=======================
     /folder
     /folder/
     /a_file.php
     /folder/.../folder
     /folder/.../folder/
     /folder/.../a_file.php
    */
    $str='/folder/file.php';
    $regex='^(.*)(/|\.php)?$';// le ' ? ' finale pose des probleme :?
     
    if (ereg ($regex, $str, $regs)) {
        for($i=0;$i<sizeof($regs);$i++)
          echo $i.'->'.$regs[$i].'<br>';
    }
    /*
    // OutPut :
    //========================
    0->/folder/file.php
    1->/folder/file.php
    2->
    */
    // $regs[0] correspond a la chaine traité
    PS : Je pensais que $reg[2] ( dans cette exemple) devait m'afficher .php . Mais j'ai l'impression que le (.*) qui precede le (/|\.php)? l'emporte a cause du ? car si je l'enleve ou que je met un + ca marche mais plus pour le cas ou url = /folder

  2. #2
    Membre émérite Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632

  3. #3
    Membre expérimenté

    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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $parts = preg_split('~/|' . preg_quote(DIRECTORY_SEPARATOR) . '~', /*realpath(*/$chemin/*)*/, -1, PREG_SPLIT_NO_EMPTY);
    if (count($parts) > 2) {
        $base = array_shift($parts);
        $fichier = pathinfo($chemin, PATHINFO_FILENAME); /* Le deuxième paramètre requiert une version >= 5.2.0 */
    } else {
        die("Houston on a un problème");
    }

  4. #4
    Inactif Avatar de CR_Gio
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 195
    Par défaut " Houston on a un problème "
    Merci pour toute ses réponses

    Citation Envoyé par Korko
    utilise la fonction parse-url
    J'utilise la variable $_SERVER['REDIRECT_URL'] donc la fonction parse-url ne m'est d'aucune aide ( $_SERVER['REDIRECT_URL'] est "le" resultat de parse_url() ) mais merci

    julp j'ai étudier le code que tu a gracieusement poster; Il a du bon il a du moins bon aussi ...

    Mais ca ne résoud toujours pas mon probleme

    Je souhaitai vérifier si une chaine vérifiait un de ces format d'url :
    /folder
    /folder/
    /a_file.php
    /folder/.../folder
    /folder/.../folder/
    /folder/.../a_file.php
    Et si la chaine vérifie ce format, récuerer la chaine correspondante en rouge (folder et a_file represente nimporte quell chain ascci)

    Ce qui ce rapproche le plus de ce que je voulai est cette expression reguliaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $regex='/(.*[^/^(\.php)])(/|\.php)?$';
    Maleuresement, le motif ne vérifie pas /folder/a_file.php/ ni /folder/a_file// ( ce qui est moins grave )

    Et je ne comprend pas pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $regex='^(.*)(/|\.php)?$'
    ne répond pas a mon probleme.

    Enfin bref. je n'y arrive pas... Soyons pragramatique, je vais collé 100 lignes de code au lieu de 2 ( julp )

    PS: Si vous avez la réponse ca serrai vraiment cool de la partager

  5. #5
    Inactif Avatar de CR_Gio
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 195
    Par défaut
    bon je pose ma solution quand meme .... :/

    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
    $str=$_SERVER['REDIRECT_URL'];
    $pathinfo = pathinfo($str);
     
    if( isset($pathinfo['dirname']) && !empty($pathinfo['dirname']) )
      $path=preg_split('~/~', $pathinfo['dirname'], -1, PREG_SPLIT_NO_EMPTY);
    if( isset($pathinfo['basename']) && !empty($pathinfo['basename']) )
      if( isset($pathinfo['extension']) && !empty($pathinfo['extension']) )
      {
        $basenamelen=strlen($pathinfo['basename']);
        $extensionlen=strlen($pathinfo['extension']);
        array_push ($path, substr($pathinfo['basename'], 0, $basenamelen-$extensionlen-1));
      }
      else
        array_push ($path, $pathinfo['basename']);
     
     
    // testé sous
    // PHP 5.xxx
    // apache 2.xx
    // linux ......
    Et ca me coute 50 milliseconde


    au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $pathArray=array();
    $str=$_SERVER['REDIRECT_URL'];
    $regex='^/(.*)(/|\.php)?$';// (/|\.php) n'ai pas pris en compte a cause du couple (.*), ?
    if( ereg($regx, $str, $regs) )
    {
      $pathArray=split(regs[1]);
    }

  6. #6
    Membre émérite Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Par défaut
    remplace ".*" par ".*?"

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

Discussions similaires

  1. Webbrowser: accéder à une URL sans télécharger ses composants
    Par gabuzomeu1 dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 19/11/2014, 19h50
  2. Réponses: 2
    Dernier message: 01/06/2011, 10h49
  3. Transformer une URL en chemin windows
    Par Wells dans le forum VB.NET
    Réponses: 6
    Dernier message: 26/10/2007, 10h56
  4. [html, balise form] comment composer une url sans le "?"
    Par Invité dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 29/01/2007, 03h50
  5. Réponses: 2
    Dernier message: 06/10/2005, 10h35

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