Php sort

Fermé
Ph[]b[]s Messages postés 23 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 31 mars 2009 - 7 mars 2009 à 19:41
Ph[]b[]s Messages postés 23 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 31 mars 2009 - 9 mars 2009 à 19:08
Bonjour,

Après avoir réfléchis toute une journée pour trouver une solution à mon problème. Je vais d'abord vous expliquer ce que je souhaite.

Ayant un serveur ftp, je souhaiterai mettre à la disposition les fichiers qui sont sur un répertoire via un navigateur sans avoir besoin de créer des comptes au ftp.

J'ai trouvé un .php que j'ai pu modifier à ma facon pour permettre de voir les fichiers sans avoir de compte et téléchargeable.

Mais les fichiers sont dans le désordre. Sachant qu'il n'y a que des fichiers (source tv d'un jeu) de match, passer 5h pour trouver les 4 démo cela ne va pas le faire. je dois donc passer par la balise sort, mais je n'ai aucune connaissance en php à part pour modifier (sans trop comprendre) et j'ai besoin de votre aide.

J'ai mis en tableau mais un soucis se pose si il y a 5000 fichier j'aurais un espace vide de 5000 lignes... Ce qui fera un total de 10000 ligne sur la page.

Voici le code :

<body>
<b>VOICI LES SOURCE TV</b>
</body>

blablabla
<? $rep = "./";

$dir = opendir($rep);


function dd($date) {

return date("d/m/Y H:i:s",$date);

}
echo '<center><table border="2" bgcolor="orange"><tr><td>nom</td><td>taille</td><td>date</td></tr>';

while ($f = readdir($dir)) {


if(is_file($rep.$f)) {


echo '<tr><td><a href="' .$f . '">' .$f . '</a></td>';

echo "<td>      ".filesize($rep.$f)." octets </td>";

echo "<td>      ".dd(filectime($rep.$f))."</td>";

echo "<br><br></tr>";

}

}



echo '</table></center>';
closedir($dir); ?>



Ce que j'aimerai c'est :

- Supprimer le blanc au début de la page (la grandeur dépends du nombre de fichier sur le répertoire)
- Pouvoir classer par nom. (les fichier commencent par : 2009/03/xx)

Merci.

11 réponses

dolmenhir Messages postés 246 Date d'inscription mercredi 4 mars 2009 Statut Membre Dernière intervention 13 mars 2009 25
7 mars 2009 à 20:16
mama mia !
c'est quoi ce balisage ???
tu fermes ton body et derrière tu continues à écrire ??
et du <br> entre un </td> et un </tr> ??? pour quoi faire ???
Bon, un peu de ménage
<body>
<b>VOICI LES SOURCE TV</b>
blablabla

<?php $rep = "./";
$dir = opendir($rep);

function dd($date) {
return date("d/m/Y H:i:s",$date);
}
echo '<center><table style="border:2px;background-color:#FF9900">'
.'<tr><td>nom</td><td>taille</td><td>date</td></tr>';

while ($f = readdir($dir)) {
  if(is_file($rep.$f)) {
    echo '<tr>'
    .'<td><a href="' .$f . '">' .$f . '</a></td>'
    .'<td>      '.filesize($rep.$f).' octets </td>'
    .'<td>      '.dd(filectime($rep.$f)).'</td>'
    .'</tr>';
  }
}

echo '</table></center>';
closedir($dir); ?>
</body>

Et là j'ai fais que le minimum syndical :o

Bon, j'ai pas résolu ton problème principal, mais, crois moi, je t'ai quand même bien aidé ;)
1
dolmenhir Messages postés 246 Date d'inscription mercredi 4 mars 2009 Statut Membre Dernière intervention 13 mars 2009 25
7 mars 2009 à 20:31
bon, une indication... (j'ai aps le temps de faire plus pour l'instant)
utilise un tableau (array)
place chaque item de ton répertoire dans le tableau puis trie le tableau
0
Ph[]b[]s Messages postés 23 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 31 mars 2009 1
7 mars 2009 à 20:56
J'ai testé les commande avec le array, mais dans les exemples que j'ai vue, les array sont déjà définis alors que là c'est une variable.

Merci.

(pour le blabla ce n'était qu'un test pour voir ce qui n'allait pas)
0
dolmenhir Messages postés 246 Date d'inscription mercredi 4 mars 2009 Statut Membre Dernière intervention 13 mars 2009 25
7 mars 2009 à 21:49
Bon, j'ai peut-être une solution :
http://www.dolmenhir.com/webmastering/sort-dir.php
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ph[]b[]s Messages postés 23 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 31 mars 2009 1
7 mars 2009 à 23:10
Je vais essayer de mettre les deux php ensemble sachant que les 2 font une fonction. Merci :)
0
Ph[]b[]s Messages postés 23 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 31 mars 2009 1
8 mars 2009 à 10:33
FInalement je n'y arrive pas...
0
dolmenhir Messages postés 246 Date d'inscription mercredi 4 mars 2009 Statut Membre Dernière intervention 13 mars 2009 25
8 mars 2009 à 12:27
essayes en cherchant du côté de la commande scandir()
https://www.php.net/manual/fr/function.scandir.php
0
Ph[]b[]s Messages postés 23 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 31 mars 2009 1
9 mars 2009 à 16:47
J'ai trouvé la base :

<?
echo ("<h1>Directory Overzicht:</h1>");

function getFiles($path) {
//Function takes a path, and returns a numerically indexed array of associative arrays containing file information,
//sorted by the file name (case insensitive). If two files are identical when compared without case, they will sort
//relative to each other in the order presented by readdir()
$files = array();
$fileNames = array();
$i = 0;

if (is_dir($path)) {
if ($dh = opendir($path)) {
while (($file = readdir($dh)) !== false) {
if ($file == "." || $file == "..") continue;
$fullpath = $path . "/" . $file;
$fkey = strtolower($file);
while (array_key_exists($fkey,$fileNames)) $fkey .= " ";
$a = stat($fullpath);
$files[$fkey]['size'] = $a['size'];
if ($a['size'] == 0) $files[$fkey]['sizetext'] = "-";
else if ($a['size'] > 1024) $files[$fkey]['sizetext'] = (ceil($a['size']/1024*100)/100) . " K";
else if ($a['size'] > 1024*1024) $files[$fkey]['sizetext'] = (ceil($a['size']/(1024*1024)*100)/100) . " Mb";
else $files[$fkey]['sizetext'] = $a['size'] . " bytes";
$files[$fkey]['name'] = $file;
$files[$fkey]['type'] = filetype($fullpath);
$fileNames[$i++] = $fkey;
}
closedir($dh);
} else die ("Cannot open directory: $path");
} else die ("Path is not a directory: $path");
sort($fileNames,SORT_STRING);
$sortedFiles = array();
$i = 0;
foreach($fileNames as $f) $sortedFiles[$i++] = $files[$f];

return $sortedFiles;
}

$files = getFiles("./");
foreach ($files as $file) print "    <b><a href=\"$file[name]\">$file[name]</a></b><br>\n";
?>


Je me servirai de cette exemple pour faire ce que je veux, merci
0
Ph[]b[]s Messages postés 23 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 31 mars 2009 1
9 mars 2009 à 17:06
Après recherche j'ai modifié la 1ere version en remplacant :


while ($f = readdir($dir)) {
if(is_file($rep.$f)) {
echo '<tr>'
.'<td><a href="' .$f . '">' .$f . '</a></td>'
.'<td> '.filesize($rep.$f).' octets </td>'
.'<td> '.dd(filectime($rep.$f)).'</td>'
.'</tr>';
}






foreach (glob("*.dem") as $f) {
echo '<tr>' .'<td><a href="' .$f . '">' .$f . '</a></td>'
.'<td> '.filesize($rep.$f).' octets </td>'
.'<td> '.dd(filectime($rep.$f)).'</td>'
.'</tr>';
}




Mais j'ai encore quelque chose qui me manque, la il me tri automatiquement dans l'ordre croissant mais j'aimerai dans l'ordre décroissant.


Merci
0
dolmenhir Messages postés 246 Date d'inscription mercredi 4 mars 2009 Statut Membre Dernière intervention 13 mars 2009 25
9 mars 2009 à 17:46
tu as array_reverse qui inverse l'ordre des éléments d'un tableau
https://www.php.net/function.array-reverse
0
Ph[]b[]s Messages postés 23 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 31 mars 2009 1
9 mars 2009 à 19:08
Peux tu m'aider à le mettre correctement?
0