Hallo,

Ik zoek een script waarbij je bestanden in een directory kunt weergeven maar dan ook gesorteerd op naam of op datum.

Wat ik wil is, ik heb in een directory een aantal pdf's staan, hier wil ik af en toe een bij zetten. de pdf's hebben een naam zoiets als 101508.pdf waarbij de 10 voor de maand oktober staat etc.

Ik wil dus de bestanden op juiste volgorde weergeven.

ik gebruik dit scriptje, maar deze sorteerd niet:

<?php
$path = "directory";
$dir = opendir($path);
while($file = readdir($dir)){
if ($file!='.' && $file!='..')
//echo '<a href="'.$path.'/'.$file.'" target="_blank">'.$file.'</a>'."<br />\r\n";
echo '<a href="http://link/'.$file.'" target="_blank">'.$file.'</a>'."<br />\r\n";

}
?>

iemand enig idee hoe ik de bestanden gesorteerd kan weergeven?
BVD
<?php
$files = glob('directory/*.pdf'); // haal alleen pdf-bestanden op

$files = sort($files); //sorteer op naam

foreach($files as $file) { //weergeef bestanden
echo '<a href="directory/' . basename($file) . '">'.basename($file).'</a>';
}
?>
edit: http://nl3.php.net/manual/en/function.filemtime.php geeft weer wanneer een bestand aangemaakt is, misschien kan je dat gebruiken.
Ik krijg de volgende foutmelding:

Warning: Invalid argument supplied for foreach() in /test.php on line 114

regel 114 is de regel van foreach

kortom het werkt helaas niet, ik weet niet wat het probleem is, misschien heeft iemand een tip voor mij?

BVD
Misschien in plaats van foreach while?
ik neem aan dat je pdf bestanden in je directory hebt staan..
de functie sort geeft een integer terug (0 of 1), dus

<?php
sort($files);
foreach($files as $file) { ... }
?>

moet het wel doen. De functie natsort sorteert volgens het Natural Order algoritme, is hetzelfde aan te roepen als sort.

Om goed te kunnen sorteren op naam (in dit geval), moet je eigenlijk de elementen waaruit de naam is opgebouwd van volgorde veranderen.

het formaat is nu: mmddyy.pdf, als je hiervan zou maken yyyymmdd.pdf dan zou je wel makkelijk met sort() kunnen sorteren, en een volgorde krijgen die klopt.

<?php
$path = "directory";
$dir = opendir($path);
$resultaat = array();
while(next($array)){
if($file!='.' && $file!='..') {
$datum = str_split($dir, 2);
$jaar = '20'.array_pop($datum);
array_unshift($datum, $jaar);
$goedeDatum = implode('',$datum);
$resultaat[$goedeDatum] = $dir;
}
}
ksort($resultaat);
foreach($resultaat as $dir) {
echo '<a href="'.$file.'">'.$file.'</a>';
}
// nu is resultaat goed gesorteerd op datum.
?>
sort($files) ipv files = sort($files) werkt inderdaad!

de andere opties ga ik ook eens proberen, ik wil eigenlijk de recente file boven aan. nu is dat onderaan. hier is vast ook een foefje voor!

ineens wist ik het weer. sort heeft meerdere opties, ik heb dus arsort($files) gebruikt om de bestanden zo te laten zien zoals ik ze wil.
Ik heb zelfde probleem. Ben de hele middag al aan het klooien/zoeken etc, krijg het niet voor elkaar.
Ik gebruik zelfde script als in eerste post van remon. Mijn bestanden zijn ook .pdf en moeten gesorteerd worden op datum gewijzigd (last modified). Als dat te moeilijk is mag het ook op bestandsnaam gesorteerd worden, in dat geval worden de namen van de bestanden 2009-12_naambestand.pdf.

<?php
$path = "het juiste path";
$dir = opendir($path);

while($file = readdir($dir)){
if ($file!='.' && $file!='..')

echo '<a href="path/'.$file.'" target="_blank\">'.$file.'</a>'."<br />";

}
?>
Kijk eens op php.net
Je gebruikt de verkeerde manier.

/* This is the WRONG way to loop over the directory. */
while ($file = readdir($handle)) {

/* This is the correct way to loop over the directory. */
while (false !== ($file = readdir($handle))) {
<?php
$files = glob('het juiste pad');

sort($files); //sorteer op naam

foreach($files as $file) { //weergeef bestanden
echo '<a href="directory/' . basename($file) . '">'.basename($file).'</a>';
}
?>

Reageren