index.php / trie par ordre alphabétique des liens

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : index.php / trie par ordre alphabétique des liens

Re: index.php / trie par ordre alphabétique des liens

par GeGaX » 13 mai 2019, 16:31

Merci Spols :wink: ,
Je vais commencer par essayer de le comprendre puis le modifier et enfin le tester.
Je te tiens au courant.
Merci encore.

Re: index.php / trie par ordre alphabétique des liens

par Spols » 13 mai 2019, 14:31

voici un code avec pas mal de correction mais je ne sais pas si c'est ce que tu voulais comme structure de retour
j'ai commenté pas mal de ligne inutile ou modifié mais il y a aussi des modifications pour correspondre avec mon environnement
function mkmap($dir) {
        // $folder = opendir ($dir);
        // echo '<ul class="'.$dir.'">';
        echo '<table border="1" class="'.$dir.'">';
        echo '<tr><th>Race</th><th>Size</th><th>Last modified</th></tr>';
        //while ($file = readdir ($folder)) {
		foreach (glob($dir, GLOB_NOESCAPE) as $file) {
            if ($file != "." && $file != "..") {
                // $pathfile = $dir.'/'.$file;
                //if (filetype($pathfile) == 'dir') {
				if (is_dir($file)) {
                        $lastModified = date("Y-m-d H:i:s", filemtime($file));
					echo '<tr><td><a href="'.$file.'">'.basename($file).'</a></td><td>FOLDER</td><td>'.$lastModified.'</td></tr>';
                    echo '<tr><td colspan="3">';mkmap($file.'/*');echo '</td></tr>';
                } else {
                    if (true || strpos($file, '.js') !== false) {
                        $bytes = filesize($file);
                        $lastModified = date("Y-m-d H:i:s", filemtime($file));
                        echo '<tr><td><a href="'.$file.'">'.basename($file).'</a></td><td>'.humanFileSize($bytes).'</td><td>'.$lastModified.'</td></tr>';
                    }
                }
            }
        }
        // closedir ($folder);
        echo '</table>';
        // echo '</ul>';
    }

    clearstatcache();
    // mkmap('.');
	mkmap('*');

Re: index.php / trie par ordre alphabétique des liens

par GeGaX » 13 mai 2019, 12:06

Bonjour Spols,
Merci pour les réponses.
J'ai étudié plutôt la seconde solution (glop) et j'ai bien lu la doc ainsi que fait quelques recherches sur le net.

Je sais pas si j'ai le droit de citer un autre site ... (la modération supprimera le lien si ce n'est pas le cas) mais j'ai trouvé ceci.

Il y a manifestement plusieurs méthodes pour y arriver mais il semblerait que je dois modifier beaucoup de choses pour arriver à ce que je souhaite.
Je ne suis pas un pro du php ... pourrais tu m'indiquer laquelle, selon toi, te semble la plus appropriée ?

Mon but est de modifier le moins possible l'existant (je veux le beurre et l'argent du beurre ...)
J'ai fais plusieurs tests mais je me retrouve systématiquement avec des erreurs de paramètres ... j'ai du mal à capter pourquoi et il semblerait que je doit aussi modifier ma boucle while par foreach ...

Merci

Re: index.php / trie par ordre alphabétique des liens

par Spols » 13 mai 2019, 08:22

Tu as 2 solutions

la première est de stocké les nom de fichier dans une variable, de la trier et après de gérer l'affichage en tableau

l'autre solution est d'utiliser glob plutot que readdir selon la doc, le comportement par défaut est de retourné les fichier par ordre alphabétique
https://www.php.net/manual/fr/function.glob.php

index.php / trie par ordre alphabétique des liens

par GeGaX » 13 mai 2019, 00:33

Bonjour,
Je souhaite trier les liens, qui s'affichent dans une table, par ordre alphabétique (noms des fichiers).
Voici le code actuel :
    function humanFileSize($bytes) {
        $bytes = floatval($bytes);
        $arBytes = array(
            0 => array(
                'UNIT' => 'Mo',
                'VALUE' => pow(1024, 2)
            ),
            1 => array(
                'UNIT' => 'Ko',
                'VALUE' => 1024
            ),
            2 => array(
                'UNIT' => 'o',
                'VALUE' => 1
            ),
        );
        
        foreach($arBytes as $arItem) {
            if($bytes >= $arItem['VALUE']) {
                $result = $bytes / $arItem['VALUE'];
                $result = strval(round($result, 2))." ".$arItem['UNIT'];
                break;
            }
        }
        return $result;
    }

    function mkmap($dir) {
        $folder = opendir ($dir);
        echo '<ul>';
        echo '<table border="1">';
        echo '<tr><th>Race</th><th>Size</th><th>Last modified</th></tr>';
        while ($file = readdir ($folder)) {
            if ($file != "." && $file != "..") {
                $pathfile = $dir.'/'.$file;
                if (filetype($pathfile) == 'dir') {
                    mkmap($pathfile);
                } else {
                    if (strpos($file, '.kmz') !== false) {
                        $bytes = filesize($pathfile);
                        $lastModified = date("Y-m-d H:i:s", filemtime($pathfile));
                        echo '<tr><td><a href="'.$pathfile.'">'.$file.'</a></td><td>'.humanFileSize($bytes).'</td><td>'.$lastModified.'</td></tr>';
                    }
                }
            }
        }
        closedir ($folder);
        echo '</table>';
        echo '</ul>';
    }

    clearstatcache();
    mkmap('.');
D'après ce que j'ai lu sur le net ça se fait avec sort() mais je m'en sors pas ...
Je veux bien un petit coup de pouce svp, je commence à |*() ...