Recherche selective dans une chaine

Eléphant du PHP | 291 Messages

07 nov. 2005, 11:48

Bonjour,

Voila ce que je cherche a faire :

Je regarde le contenu d'un dossier qui me retourne (echo) la liste complete des fichiers sous la forme :

page2.php
page44.php
test.txt
exemple.com

voila le code :
$rep = opendir('./');

while ($file = readdir($rep)) {

echo $file . "<br>";

}

closedir($rep);
Je voudrais ensuite ne retenir que les fichiers qui porte le nom pageX.php (de mon exemple) sans le .php, je pense qu'il faut que je fasse un tableau dans ma boucle ?

Je sais pas trop comment m'y prendre

Pouez vous me conseiller ?

D'avance merci

Mammouth du PHP | 983 Messages

07 nov. 2005, 12:07

La fonction glob() est faite pour ca:
<?php
$files = glob("page*.php");
foreach ($files as $filename) 
   echo $filename.'<br />';

?> 

Eléphant du PHP | 291 Messages

07 nov. 2005, 12:15

Je connaissais pascette fonction, je pense que c'est résolu je vais voir ce que je peux faire !

Merci

Invité
Invité n'ayant pas de compte PHPfrance

07 nov. 2005, 13:30

alors voila en fait j'arrive bien a utiliser le fonction glob() mais j'ai d'autre problèmes et je pense pas être super logique. Je sais que ca serait plus simple de faire une seulle page pour faire ce que je veux mais je voudrais y arriver de cette facon.

Voila le code :
<p class="unnamed1"><span class="unnamed1">Pages -

<?php
// Variable qui recupere le nom de la page courante
$page = basename($_SERVER["PHP_SELF"]);

// Ouverture du dossier ./
$rep = opendir('./');

// Lecture du dossier ( fonction glob() ) n'affiche que ce qui commence par accueil*.php
$files = glob("accueil*.php");

// Mise en forme dans un tableau
foreach ($files as $filename)

// Si la page courante est != d'une page dans $filename
// On l'affiche en lien
if ($page != $filename) {

// Affichage du tableau
echo '<a href="' . $filename . '">' . $filename . '</a>' . ' &middot; '; // A rempacer $files[0]

// Sinon on l'affiche en gras
} else {
echo '<strong>' . $filename . '<strong>' . ' &middot; '; // A rempacer $files[0]
}

// Fermeture du dossier
closedir($rep);
?>
</span></p>
Donc pour le moment il m'affiche :

Code : Tout sélectionner

Pages - accueil.php · accueil1.php · accueil2.php · accueil3.php · accueil4.php · accueil5.php · accueil55.php ·
donc en fait j voudrais faire plusieurs choses :

* exclure $files[0] car toujours == a accueil.php
* afficher des chiffres des pages a la place des nom de fichiers (sachant que accueil.php == 1)
* inverser les liens, c'est a dire que si dans mon dossier j'ai :
  • accueil1.php
    accueil2.php
    accueil3.php
    accueil4.php
    accueil5.php
    accueil6.php
Je voudrais que la page accueil1.php soit toujours a la dernière position dans mes liens


Je sais pas si c'est très clair, a votre avis c'est réalisable ?

D'avance merci

Mammouth du PHP | 983 Messages

07 nov. 2005, 14:20

Avec glob(), tu n'as pas besoin d'ouvrir une ressource sur un répertoire. En ce qui concerne le reste, tu peux t'en sortir ainsi:
<p class="unnamed1"><span class="unnamed1">Pages -

<?php
// Variable qui recupere le nom de la page courante
$page = basename($_SERVER["PHP_SELF"]);

// Lecture du dossier ( fonction glob() ) n'affiche que ce qui commence par accueil*.php
$files = glob("accueil*.php");

$nb_files = sizeof($files);
for($i= $nb_files; $i > 0; $i--)
// Affichage du tableau
echo '<a href="' . $files[$i] . '">' . $files[$i] . '</a>' . ' &middot; '; ]

//on l'affiche en gras
echo '<strong>' . $files[0] . '<strong>' . ' &middot; '; 
}

?>
</span></p>
Dis moi si ca te convient, ou si tu ne comprends pas ;)

Eléphant du PHP | 291 Messages

07 nov. 2005, 14:41

Alors j'ai modifié un peu, je comprend le principe, mais je suis pas a l'aise avec le for, maintenant il me faut supprimer le dernier &middot; qui ne serta rien. Mais aussi je suhaiterais remplacer le nom des fichiers par une numérotation, est il possible d'utiliser le compteur deja présente et de l'inverser pour le réutilise ensuite ?

voila le code :
<p class="unnamed1"><span class="unnamed1">Pages -
<?php
// Variable qui recupere le nom de la page courante
$page = basename($_SERVER["PHP_SELF"]);

if ($page == 'accueil.php') {
echo '<strong>1</strong>';
} else {
echo '<a href="accueil.php">1</a>';
}
?>

<?php
// Lecture du dossier ( fonction glob() ) n'affiche que ce qui commence par accueil*.php
$files = glob("accueil*.php");

$nb_files = sizeof($files);
for($i= $nb_files; $i > 0; $i--) {
// Affichage du tableau
if ($page != $files[$i]) {

// Affichage du tableau
echo '<a href="' . $files[$i] . '">' . $files[$i] . '</a>' . ' &middot; ';
// Sinon on l'affiche en gras
} else {
echo '<strong>' . $files[$i] . '<strong>' . ' &middot; ';
}
}


?>
</span></p>
ce qui donne "graphiquement" :

Code : Tout sélectionner

Pages - 1 · accueil55.php · accueil5.php · accueil4.php · accueil3.php · accueil2.php · accueil1.php ·
donc en fait je voudrais que a la place de accueil55.php il est le chiffre 2, d'ou ma question plus haut

Merci

Eléphant du PHP | 291 Messages

07 nov. 2005, 16:11

en fesant des test je me rend compte maintenant que la page accueil.php est maintenant compté dans la boucle alors que d'apres mon dernier post elle n'y figuré pas, pour le nom du lien en fait il faudrait que j'utilise le $nb_files - 1 et que je l'affiche a l'enver, faut il refaire une deuxième boucle for pour faireca ?

voila le code :
<p class="unnamed1"><span class="unnamed1">Pages -
<?php
// Variable qui recupere le nom de la page courante
$page = basename($_SERVER["PHP_SELF"]);

if ($page == 'accueil.php') {
echo '<strong>1</strong>';
} else {
echo '<a href="accueil.php">1</a>';
}
?>

<?php
// Lecture du dossier ( fonction glob() ) n'affiche que ce qui commence par accueil*.php
$files = glob("accueil*.php");

$nb_files = sizeof($files);
for($i= $nb_files; $i > 0; $i--) {
// Affichage du tableau
if ($page != $files[$i]) {

// Affichage du tableau
echo '<a href="' . $files[$i] . '">' . $files[$i] . '</a>' . ' &middot; ';
// Sinon on l'affiche en gras
} else {
echo '<strong>' . $files[$i] . '<strong>' . ' &middot; ';
}
}


?>
</span></p>
Merci

Eléphant du PHP | 291 Messages

07 nov. 2005, 16:35

autant pour moi, la page accueil.php etait presente car j'avais renommer un fichier en accueil-4.php

Eléphant du PHP | 291 Messages

07 nov. 2005, 17:03

en fait je ne comprend pas quelques choses (rami) pourquoi quand je n'utilise pas la variable $files[$i] dans le nom du lien il m'affiche la premiere page (en réalité le chiffre 1) en prenant pour lien la page courante ?

voila le code :
<p class="unnamed1"><span class="unnamed1">Pages -
<?php
// Variable qui recupere le nom de la page courante
$page = basename($_SERVER["PHP_SELF"]);

if ($page == 'accueil.php') {
echo '<strong>1</strong>';
} else {
echo '<a href="accueil.php">1</a>';
}
?>

<?php
// Lecture du dossier ( fonction glob() ) n'affiche que ce qui commence par accueil*.php
$files = glob("accueil*.php");
$i2 = 0;

$nb_files = sizeof($files);
for($i= $nb_files; $i > 0; $i--) {
$i2 = $i2 +1;

// Condition
if ($page != $files[$i]) {

// Affichage du lien
echo '<a href="' . $files[$i] . '">' . $i2 . '</a>' . ' &middot; ';
// Sinon on l'affiche en gras
} else {
echo '<strong>' . $i2 . '<strong>' . ' &middot; ';
}
}

?>
</span></p>
D'avance merci[/code]

Eléphant du PHP | 291 Messages

07 nov. 2005, 18:09

Personne n'aurait une idée de comment je peux supprimer le premer resultat de le boucle for ?

merci

Eléphant du PHP | 291 Messages

07 nov. 2005, 19:33

ben en fait je suis trop null!

ca marche comme ca :
<p class="unnamed1"><span class="unnamed1">Pages -
<?php
// Variable qui recupere le nom de la page courante
$page = basename($_SERVER["PHP_SELF"]);

if ($page == 'accueil.php') {
echo '<strong>1 </strong>&middot; ';
} else {
echo '<a href="accueil.php">1 </a>&middot; ';
}
?>

<?php
// Lecture du dossier ( fonction glob() ) n'affiche que ce qui commence par accueil*.php
$files = glob("accueil*.php");
$i2 = 1;

$nb_files = sizeof($files);
for($i= ($nb_files -1); $i > 0; $i--) {
$i2 = $i2 +1;

// Condition
if ($page != $files[$i]) {

// Affichage du lien
echo '<a href="' . $files[$i] . '">' . $i2 . '</a>' . ' &middot; ';
// Sinon on l'affiche en gras
} else {
echo '<strong>' . $i2 . '<strong>' . ' &middot; ';
}
}

?>
</span></p>
Merci a vous!