LISTING DE RÉPERTOIRE AVEC AFFICHAGE PAGE PAR PAGE

Signaler
Messages postés
67
Date d'inscription
samedi 3 juin 2006
Statut
Membre
Dernière intervention
29 janvier 2009
-
Messages postés
7
Date d'inscription
samedi 24 novembre 2007
Statut
Membre
Dernière intervention
30 novembre 2007
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/43407-listing-de-repertoire-avec-affichage-page-par-page

Messages postés
7
Date d'inscription
samedi 24 novembre 2007
Statut
Membre
Dernière intervention
30 novembre 2007

et non voila le message des l'ouverture de la page

Warning: in_array() [function.in-array]: Wrong datatype for second argument in liste.php on line 14

Warning: in_array() [function.in-array]: Wrong datatype for second argument in liste.php on line 14

Page précédente - - Page suivante
Messages postés
9
Date d'inscription
dimanche 28 mars 2004
Statut
Membre
Dernière intervention
1 juin 2011

Il suffit de de ne pas fermer la parenthse du if avant le && mais après cet élément !!

if($file != '.' && $file != '..' && $file != $current && in_array(array('.htm','.html'),strrchr($file,'.')))

ca devrait mieux marcher !!
Messages postés
7
Date d'inscription
samedi 24 novembre 2007
Statut
Membre
Dernière intervention
30 novembre 2007

voila le script :

<?php
$path = '.';
$current = $_SERVER['PHP_SELF'];
if(is_numeric($_GET['page'])){
$num_page = $_GET['page'];
} else {
$num_page = 1;
}
$dh = opendir($path);
$i 0;$compteur 0;
$debut = ($num_page - 1) * 10;
$fin = $debut + 9;
while (($file = readdir($dh)) !== false) {
if($file != '.' && $file != '..' && $file != $current) && in_array(array('.htm','.html'),strrchr($file,'.'))
{
if ($i >= $debut && $i <= $fin) {
printf('%s. [%s/%s %s]
', $i+1, $path, $file, $file);
}
$i++;$compteur++;
}
}
closedir($dh);
echo '';
if($num_page > 1) {
echo '['.$current.'?page='.($num_page - 1).' Page précédente] - ';
} else {
echo 'Page précédente - ';
}
$div = floor($compteur / 10);
if($div == $compteur / 10){
$total_page = $div;
} else {
$total_page = $div + 1;
}
for($b = 1;$b <= $total_page;$b++){
if($b == $num_page){
echo $b.' ';
} else {
echo '['.$current.'?page='.$b.' '.$b.'] ';
}
}
if(10 * $num_page < $compteur){
echo ' - ['.$current.'?page='.($num_page+1).' Page suivante]';
} else {
echo ' - Page suivante';
}
?>

merci pour tes reponces
Messages postés
7
Date d'inscription
samedi 24 novembre 2007
Statut
Membre
Dernière intervention
30 novembre 2007

voila ce que ca affiche quand j'ouvre la page

Parse error: syntax error, unexpected T_BOOLEAN_AND in liste.php on line 14
Messages postés
9
Date d'inscription
dimanche 28 mars 2004
Statut
Membre
Dernière intervention
1 juin 2011

oui tout à fait :)

après $file != $current il suffirait de rajouter
&& in_array(array('.htm','.html'),strrchr($file,'.'))

ca devrait fonctionner ...
ca verifie que l'extension du fichier lu appartient à une liste prédéfinie (array('.htm','.html')...)
En esperant que ca t'aide :)
Messages postés
7
Date d'inscription
samedi 24 novembre 2007
Statut
Membre
Dernière intervention
30 novembre 2007

BONJOUR
BIEN COOL CE SCRIPT , mais est ce possible de lire que les fichiers .html ou .htm ,ne pas voir les photo gif,jpeg et autres

merci
Messages postés
153
Date d'inscription
mardi 17 août 2004
Statut
Membre
Dernière intervention
23 décembre 2010

'lut
j'y reviens
je préfère ma méthode POUR CE TYPE DE PROGRAMME s'entend !
ici ce ne sont que des if / else, plus clair, non ?
@TOZMAN2 :
lister un répertoire, je ne suis pas sûr que le temps mis à l'exécution par PHP soit plus lent avec la méthode ternaire, qu'avec le classique if / else

cf cette "source" http://www.phpcs.com/codes/IF-ELSEIF-ELSE-AVEC-OPERATEUR-TERNAIRE_34335.aspx
intéressant de voir les différents avis, surtout de personnes confirmées de ce site.

je persiste : ici l'utilisation de l'opérateur ternaire est plus clair.

surtout qu'une fois qu'on a compris que c'est :
$var = ( condition ) ? condition-vrai : condition-fausse;

non ?

je lance le débat interminable du "moi, je préfère ça" - "pas moi, je préfère ça" - "ça, c'est plus rapide..." etc.......

kiki
Messages postés
67
Date d'inscription
samedi 3 juin 2006
Statut
Membre
Dernière intervention
29 janvier 2009

coucou, c'est possible de modifier ce code pour qu'il parcour aussi les dossier/sous dossier/ ect? ;)
Messages postés
9
Date d'inscription
dimanche 28 mars 2004
Statut
Membre
Dernière intervention
1 juin 2011

@ simonviei > je connnaissais également déjà glob...mais cette fonction est désactivée chez certains hébergeurs (free notamment) car elle ne tient pas compte des droits utilisateurs et permettait de naviguer dans tous les répertoires d'un site même les répertoires parents où l'utilisateur n'était pas cené aller ...

@ tozman > bien d'accord avec toi : if et else est bien plus lisible :)

En ce qui concerne le @ devant le $_GET['page'] je n'en vois pas l'utilité ^^
Messages postés
17
Date d'inscription
jeudi 13 avril 2006
Statut
Membre
Dernière intervention
1 décembre 2008

une fonction tres interressrante pour lister un dossier : glob()
Messages postés
40
Date d'inscription
lundi 8 mars 2004
Statut
Membre
Dernière intervention
10 décembre 2008

Bonjour,
Question à Masterhill: je ne vois pas le '@' dont tu parles. Où le places-tu exactement? Ma queqtion peut paraitre stupide à certains, mais je suis totalement débutant en PHP (je faisais de l'ASP que je préfére nettement au niveau de la gestion des bases de données que j'ai beaucoup de mal à assimiler en PHP, mais le coût de l'hebergement....)
Messages postés
1
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
16 juillet 2007

Les if...else sont plus rapide à executer par PHP... donc l'interêt de les changer reste limité. d'autant que pour modification du code un bloc if...else est bien plus explicite, surtout pour les débutants.
Messages postés
9
Date d'inscription
dimanche 28 mars 2004
Statut
Membre
Dernière intervention
1 juin 2011

Salut @ tous

kiki2sirom : je connais les operateurs ternaires, mais pour plus de lisibilité (tout le monde ne les connait pas) j'ai préféré passer par les if else...

Ensuite il est vrai que certaines lignes auraient pu être mieux codées... j'avais pas fait gaffe :p

Vais modifier cela :)
Messages postés
3
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
12 juillet 2007

Salut !
Bon code, j'me suis juste permis de rajouter un pti '@' à la ligne 4 parce qu'au lancement de page sans le $_get['page'], on a le droit à un pti avertissement.
Mais sinon tout est impec 9.5/10 ;-)
Messages postés
153
Date d'inscription
mardi 17 août 2004
Statut
Membre
Dernière intervention
23 décembre 2010

damn !!!
pas conservé mon indentation...
chaipa comment qu'on fait ici
;-)
kiki
Messages postés
153
Date d'inscription
mardi 17 août 2004
Statut
Membre
Dernière intervention
23 décembre 2010

je pense qu'ici un peu d'opérateur ternaire ne ferait pas de mal
mais ce n'est que mon avis personnel.
vu que tu as beaucoup de if, else, du style :

if($num_page > 1) {
echo '['.$current.'?page='.($num_page - 1).' Page précédente] - ';
} else {
echo 'Page précédente - ';
}

pourrait devenir simplement :
echo ($num_page > 1?'['.$current.'?page='.($num_page - 1).' Page précédente] - ':'Page précédente - ');

tout comme :
if(10 * $num_page < $compteur){
echo ' - ['.$current.'?page='.($num_page+1).' Page suivante]';
} else {
echo ' - Page suivante';
}

pourrait devenir :
echo (10 * $num_page < $compteur?' - ['.$current.'?page='.($num_page+1).' Page suivante]':' - Page suivante');

* de plus:
if($div == $compteur / 10){
$total_page = $div;
} else {
$total_page = $div + 1;
}
for($b = 1;$b <= $total_page;$b++){
pourrait aisément devenir :
if ($div != $compteur / 10)
$div++;
for($b = 1;$b <= $div;$b++){

ton $total_page n'est pas très utile ici !

* de plus:

if(is_numeric($_GET['page'])){
$num_page = $_GET['page'];
} else {
$num_page = 1;
}

deviendrait :
$num_page=(is_numeric($_GET['page'])?$_GET['page']:1);

* tout comme :
for($b = 1;$b <= $div;$b++){
if($b == $num_page){
echo $b.' ';
} else {
echo '['.$current.'?page='.$b.' '.$b.'] ';
}
}

deviendrait :
for($b = 1;$b <= $div;$b++){
echo ($b == $num_page?$b.' ':'['.$current.'?page='.$b.' '.$b.'] ');
}


j'aime beaucoup l'opérateur ternaire, quand ça reste dans le domaine du lisible, soit if / else ou if / elseif / else

47 lignes au final devient 27 lignes :

<?php
$path = '.';
$current = $_SERVER['PHP_SELF'];
$num_page=(is_numeric($_GET['page'])?$_GET['page']:1);
$dh = opendir($path);
$i 0;$compteur 0;
$debut = ($num_page - 1) * 10;
$fin = $debut + 9;
while (($file = readdir($dh)) !== false) {
if($file != '.' && $file != '..' && $file != $current) {
if ($i >= $debut && $i <= $fin) {
printf('%s. [%s/%s %s]
', $i+1, $path, $file, $file);
}
$i++;$compteur++;
}
}
closedir($dh);
echo '';
echo ($num_page > 1?'['.$current.'?page='.($num_page - 1).' Page précédente] - ':'Page précédente - ');
$div = floor($compteur / 10);
if ($div != $compteur / 10)
$div++;
for($b = 1;$b <= $div;$b++)
echo ($b == $num_page?$b.' ':'['.$current.'?page='.$b.' '.$b.'] ');

echo (10 * $num_page < $compteur?' - ['.$current.'?page='.($num_page+1).' Page suivante]':' - Page suivante');
?>

c'est quand même intéressant, non ?

allez
kiki
Messages postés
67
Date d'inscription
samedi 3 juin 2006
Statut
Membre
Dernière intervention
29 janvier 2009

Hehe super code ;)