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:
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
" 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:
$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:
$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 :)