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 :

[Tableaux] parsing de REQUEST_URI apres URL rewriting


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut [Tableaux] parsing de REQUEST_URI apres URL rewriting
    hello

    J'ai un petit problème ...
    j'ai beau chercher sur internet, mais je ne trouve pas mon bonheur

    Soit un site ou les url's seront du type http://www.monsite.be/site/section1/section2/section3
    mais avec un nombre de sections pouvant aller de 0 (racine) à 3

    J'ai fait de l'url rewrite pour que tout ce qui suit http://www/monsite.be/site/ soit redirigé sur une page index.php
    pour se faire, dans le .htaccess du repertoire site, j'ai mis ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <IfModule mod_rewrite.c>   
     RewriteEngine On   
     RewriteBase /site/   
     RewriteCond %{REQUEST_FILENAME} !-f   
     RewriteCond %{REQUEST_FILENAME} !-d 
     RewriteRule . /site/index.php [L]   
     </IfModule>

    --> donc
    avec une page de test index.php comme ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <html> 
    <head><body> 
    <?php 
    echo "<p>"; 
    echo "PHP_SELF " . $_SERVER["PHP_SELF"]; 
    echo "<br/>REQUEST_URI " . $_SERVER["REQUEST_URI"]; 
    echo "<br/>QUERY_STRING " . $_SERVER["QUERY_STRING"]. "</p>"; 
    ?> 
    </body> 
    </html>

    j'obtiens pour l'url
    http://www.monsite.be/site/europe/belgique/mons
    un résultat comme celui-ci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    monsite.be ... en construction page de test 
     
    PHP_SELF /site/index.php 
    REQUEST_URI /site/europe/belgique/mons 
    QUERY_STRING

    Maintenant, je voudrais parser la REQUEST_URI pour extraire les 3 variables dans un tableau qui contiendrait en index 'arg1' --> europe
    'arg2' --> belgique et 'arg3" --> mons

    et c'est là que ca coince ...

    je ne réussit pas à les extraire, je m'embrouille dans les regexp en php

    Parce que les contraintes sont:
    1) nombre de sous-niveau variable (de 0 à 3)
    2) il pourrait y avoir un / final après chaque niveau
    3) il pourrait y avoir un .php après chaque niveau
    ( http://www.monsite.be/site/europe/belgique/mons.php )
    4) Les variables doivent être suffisament générique, et pouvoir être utilisée partout ... donc, dans un tableau global, avec des index du genre arg1, arg2, arg3

    Quelqu'un pourrait m'aider? :-) je touille et je n'arrive pas à faire ce que je veux

    merci

  2. #2
    Candidat au Club
    Inscrit en
    Octobre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut ca avance
    J'ai avancé un peu en essayant explode et preg_split ... je crois que preg_split est mieux pour mon cas...

    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
    <html>
    <head><body>monsite.be ... en construction new index
    <?php
    echo "<p>";
    echo "PHP_SELF " . $_SERVER["PHP_SELF"];
    echo "<br/>REQUEST_URI " . $_SERVER["REQUEST_URI"];
    echo "<br/>QUERY_STRING " . $_SERVER["QUERY_STRING"];
    echo "<br/>SCRIPT_FILENAME " . $_SERVER["SCRIPT_FILENAME"] . "</p>";
    echo "<br/><br/>explode: <br/>";
    $pathvar = explode("/", $_SERVER["REQUEST_URI"],-1);
    print_r($pathvar);
    echo "<br/><br/>preg_split: <br/>";
    $pathvar2= preg_split("/\//i", $_SERVER["REQUEST_URI"], -1, PREG_SPLIT_NO_EMPTY);
    print_r($pathvar2);
    ?>
    </body>
    </html>


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    monsite.be ... en construction new index
     
    PHP_SELF /news/index.php
    REQUEST_URI /news/hopitaux/bruxelles/truc/machin/
    QUERY_STRING
     
     
     
    explode:
    Array ( [0] => [1] => news [2] => hopitaux [3] => bruxelles [4] => truc [5] => machin [6] => )
     
    preg_split:
    Array ( [0] => news [1] => hopitaux [2] => bruxelles [3] => truc [4] => machin )

    ... vu que ca résout le problème des tableaux vides, à cause du / premier et de l'éventuel final

    ... bon, me reste encore à retirer des ".php" et les éventuelles variables passées en GET

    En effet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    http://www.monsite.be/news/hopitaux/bruxelles/truc/machin/news.php?blabla=truc&marcel=ficelle
    explode:
    Array ( [0] => [1] => news [2] => hopitaux [3] => bruxelles [4] => truc [5] => machin [6] => news.php?blabla=truc&marcel=ficelle )
     
    preg_split:
    Array ( [0] => news [1] => hopitaux [2] => bruxelles [3] => truc [4] => machin [5] => news.php?blabla=truc&marcel=ficelle )

  3. #3
    Candidat au Club
    Inscrit en
    Octobre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Résolution
    Bon ... que de réactions à ma question :-))

    Voilà, j'ai résolu tout seul comme un grand ... et voici mon implémentation

    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
    <html>
    <head><body>gmbe.be ... en construction new index
    <?php
     
    define('DEF_myBasePath','/news');
     
    function RemoveExtensionOrGetVar($valeur)
    {
    	// Note our use of ===.  Simply == would not work as expected
    	// because the position of 'a' is the 0th (first) character.
    	$pos=strpos($valeur,'.');
    	if ($pos !== false)
    	{
    	 $valeur=substr($valeur,0,$pos);
    	}
    	$pos=strpos($valeur,'?');
    	if ($pos !== false)
    	{
    	 $valeur=substr($valeur,0,$pos);
    	}
    	return $valeur;
    }
     
    function RemoveBasePathFromRequestURI()
    {
     
    	//PHP_SELF = /news/index.php
    	//REQUEST_URI = /news/europe/belgique/?blabla=truc&fdjdfs=dd
    	//this function must return /europe/belgique?blabla=truc&fdjdfs=dd
    	$beginPathToRemove="";
    	if(!defined('DEF_myBasePath'))
    	{
    	   $pathindex= pathinfo($_SERVER["PHP_SELF"]);
    	   $beginPathToRemove=$pathindex["dirname"];
    	}
    	else
    	{
    		$beginPathToRemove=DEF_myBasePath;
    	}
     
    	$pos=strpos($_SERVER["REQUEST_URI"],$beginPathToRemove);
    	if ($pos === false)
    	{
           echo "<br/>error, returning REQUEST_URI<br/>";
           return $_SERVER["REQUEST_URI"];
    	}
    	else
    	{
           $returnstring=substr($_SERVER["REQUEST_URI"],strlen($beginPathToRemove));
           return $returnstring;
    	}
     
     
    }
     
    function ExtractVarFromRequestUri()
    {
     
       	$paramstring=RemoveBasePathFromRequestURI();
    	$pathvar= preg_split("/\//i", $paramstring, -1, PREG_SPLIT_NO_EMPTY);
    	foreach ($pathvar as $cle => $valeur)
    	{
    		$pathvar[$cle]=RemoveExtensionOrGetVar($valeur);
    	}
    	return $pathvar;
    }
     
    echo "<p>";
    echo "PHP_SELF " . $_SERVER["PHP_SELF"];
    echo "<br/>REQUEST_URI " . $_SERVER["REQUEST_URI"];
    echo "<br/>QUERY_STRING " . $_SERVER["QUERY_STRING"];
    echo "<br/>SCRIPT_FILENAME " . $_SERVER["SCRIPT_FILENAME"] . "</p>";
     
    $pathvar3=ExtractVarFromRequestUri();
    echo "<br/><br/>Fonction ExtractVar: <br/>";
    print_r($pathvar3);
    ?>
    </body>
    </html>

    Donc, une url du type
    http://www.monsite.be/news/europe/belgique/bruxelles

    sortira comme tableau de la fonction ExtractVarFromRequestUri:
    Array ( [0] => europe [1] => belgique [2] => bruxelles )

    http://www.monsite.be/news/europe/belgique/bruxelles/
    http://www.monsite.be/news/europe/be.../bruxelles.php
    http://www.monsite.be/news/europe/be...bla=true&dd=ee

    retournerons le même tableau

    Si la constante DEF_myBasePath est définie, on l'utilise comme base pour savoir à partir d'où extraire
    ici:
    define('DEF_myBasePath','/news');

    si on avait fait
    define('DEF_myBasePath','/');
    --> On aurait eu un tableau de 4 éléments, avec news en premier

    define('DEF_myBasePath','/news/europe');
    --> nous aurait donné un tableau de 2 éléments avec belgique et bruxelles ...

    Pas de define ... on se base sur le PHP_SELF ... qui vaut ici /news/index.php --> équivalent à define('DEF_myBasePath','/news');

    et dans le cas d'une erreur du define
    define('DEF_myBasePath','/truc');
    on parse à partir de REQUEST_URI sans enlever le début, donc c'est équivalent à define('DEF_myBasePath','/');


    Avez-vous des commentaires, améliorations, ou autre???

    merci

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/10/2008, 19h02
  2. [Tableaux] Url rewriting et query string
    Par Evocatii dans le forum Langage
    Réponses: 2
    Dernier message: 05/02/2008, 17h36
  3. [Tableaux] URL rewriting fixe sans passage d'ID
    Par Romalafrite dans le forum Langage
    Réponses: 2
    Dernier message: 24/09/2006, 14h31
  4. [Tableaux] Parse d'URL
    Par nicoaix dans le forum Langage
    Réponses: 11
    Dernier message: 10/05/2006, 12h53
  5. Réponses: 6
    Dernier message: 19/12/2005, 13h41

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