Parser les sous-répertoires d'une url

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 752 fois - Téléchargée 28 fois

Contenu du snippet

La fonction parse_url() ne parse pas les sous-répertoires d'une url (peut-être y a-t-il une fonction dédiée à cet effet ?), alors cette fonction sert à retrouver tous les sous-répertoires présent dans une url de type http://www.site.php/doss1/doss2/page.php?cavamenant=hein de les placer dans un tableau (içi on aura une valeur = doss1 et une valeur = doss2, pour les autres types d'url, je n'ai pas essayé.

Source / Exemple :


function dossier($url)
{ 
  $lien_seg = parse_url("$url");
  $do=dirname($lien_seg['path']);
  preg_match_all('@[/]+[0-9_A-Za-z]{1,255}@', $do, $doss);
  $n_ligne=count($doss[0]);
  for ($i=0;$i<$n_ligne;$i++)
  {
	 $doss[0][$i]=ereg_replace("[/]",'', $doss[0][$i]);
  };
  return $doss[0];
}

Conclusion :


function dossier($url)
{
//** sur une url de type http://www.site.com/doss1/doss2/page.php

$lien_seg = parse_url("$url");
//** parse l'url

$do=dirname($lien_seg['path']);
//** Je ne prends que $lien_seg['path'] : /doss1/doss2/page.php
//** puis avec dirname, je ne garde que /doss1/doss2
//** ATTENTION : $do est un array()
//** la chaine de caractère est dans $do[0]
//** on a : $do[0][0]='/doss1/doss2'

preg_match_all('@[/]+[0-9_A-Za-z]{1,255}@', $do, $doss);
//** Je met tout ce qui est après le caractère "/" du tableau $doss
//** dans le tableau $do (je laisse passer les caractères pouvant
//** constituer un nom de dossier jusqu'a concurrence de 255 caractères)
//** on a maintenant $doss[0][0]='/doss1' et $doss[0][1]='/doss2'

$n_ligne=count($doss[0]);
//** je compte le nombre de ligne du tableau $doss[o] pour la suite

for ($i=0;$i<$n_ligne;$i++)
{
$doss[0][$i]=ereg_replace("[/]",'', $doss[0][$i]);
//** je remplace les caractères "/" par rien, bref je les enlève
//** je n'arrive pas à me servir de la fonction array_walk qui me
//** semblait approprièe
};

return $doss[0];
//** il suffira d'utiliser cette fonction comme çà :
//** $nom_de_dossiers = dossier($url); et dans le tableau
//** $nom_de_dossiers, vous avez tous les sous répertoires
//** de l'url.
//** un print_r ($nom_de_dossiers) affichera tout dans
//** un premier temps
}

A voir également

Ajouter un commentaire

Commentaires

Messages postés
66
Date d'inscription
jeudi 21 juillet 2005
Statut
Membre
Dernière intervention
28 décembre 2010

Bonjour

Une autre fonction php existe, c'est la fonction recursive_readdir.
Pour plus d'information reportez vous à ce site :

http://www.comscripts.com/sources/php.fonction-recursivereaddir.263.html

@+
Messages postés
163
Date d'inscription
lundi 29 septembre 2003
Statut
Membre
Dernière intervention
8 mai 2010

je ne comprenais pas aussi, explode() forcément.
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
38
les expressions régulières pour ça ???
comme le dis antho, c'est inutile ici... elles sont trop lentes...
Messages postés
26
Date d'inscription
lundi 5 janvier 2004
Statut
Membre
Dernière intervention
29 janvier 2009

Ah oui, exact, je ne connaissais pas.

Merci.
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Salut,

plutôt que d'utiliser des expressions régulières tu peux faire un explode avec le chemin retourné par parseurl, un explode de '/' et hop ;-)

a +

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.