M muskot Medlem sedan jan. 2002 7 905 inlägg Frågan 22 apr. 2002 22:11 #1 Använder koden under för att lista filer i en katalog.
Problemet är att jag vill ha vill ha allting listat i bokstavsordning, med underkatalogerna överst. Det vill säga någonting i stil med:
katalog1
katalog2
katalog4
fil1.php
fil2.php
Att man kan använda t ex natcasesort() har jag lite hum om, men det blir inte riktigt bra eftersom underkatalogerna då inte hamnar högst upp!
Förstår ni vad jag menar? Lösningar, någon?
$dir_name = "e:\blabla";
$dir = opendir($dir_name);
while ($file_name = readdir($dir)):
if ($file_name != "." && $file_name != ".."):
echo "$file_name\n<br>";
endif;
endwhile;
closedir($dir)
N nkrantz Medlem sedan apr. 2002 830 inlägg förslag bara.. går det inte att läsa in allt i en array och sedan sortera den? typ allt som inte har filändelser först och sedan resten?
F FlashX Medlem sedan nov. 1999 1 033 inlägg Annars finns ju is_dir och is_file redan klara att användas.
N nkrantz Medlem sedan apr. 2002 830 inlägg
Annars finns ju is_dir och is_file redan klara att användas.
hm.. öh.. just det.. hrmpf.. :r
M muskot Medlem sedan jan. 2002 7 905 inlägg Elände...
Jag fattar inte hur jag ska göra.
Har kollat is_dir och is_file på php.net men jag hajar ändå inte hur jag ska fixa det.
F Famine Medlem sedan jan. 2002 65 inlägg Hmm
Du får först läsa in och sortera alla kataloger i en array. Sen gör du samma sak fast med filerna. Annars kan du kolla på en kompis och mitt lilla projekt: http://fami.asna.nu/filelist.txt
Det finns en del buggar och html koden som skapas är inte direkt den bästa. Hoppas du får ut något av den kanske något röriga koden, som förövrgit var min första "riktiga" sak jag gjorde i php ;)
spango Medlem sedan juni 2000 8 205 inlägg Annars kan man ju tänka sig något sådant här:
function isStupidLink($name){
return $name == '.' or $name == '..';
}
function getEntriesInDirectory($dirname){
$entries = array();
$dir = opendir($dirname);
while ($entry = readdir($dir))
if (!isStupidLink($entry))
$entries[] = $entry;
return $entries;
}
function fileVsDirectorySort($a, $b){
$adir = is_dir($a);
$bdir = is_dir($b);
if ($adir == $bdir)
return 0;
else
return ($adir) ? -1 : 1;
}
$entries = getEntriesInDirectory('C:\foo');
natsort($entries);
usort($entries, 'fileVsDirectorySort');
foreach($entries as $entry)
#skriv ut $entry
M muskot Medlem sedan jan. 2002 7 905 inlägg Tack för hjälpen.
Problemet är att det bara går (i alla fall för mig) att lista filer som ligger i min dokumentrot. Försöker jag lista underkataloger flippar det ur...
Den kod famine postade fungerar så länge man kör med opendir('.') men om jag t ex kör opendir('files/') så får jag följande felmeddelande:
Warning: Wrong datatype in sort() call in d:\wwwroot\list.php on line 56
Filerna och katalogerna listas, men helt huller om buller och felaktig storleksangivelse i vissa fall (0 b).
Med spangos kod får jag inga felmeddelanden, dock samma fel...
Jämmer och elände :(
spango Medlem sedan juni 2000 8 205 inlägg Observera att filnamnen inte blir relativa utifrån den katalog du arbetar från. Prova om det går bättre om du byter ut den här raden i getEntriesInDirectory:
$entries[] = $entry;
och ersätter den med exempelvis:
$entries[] = $dirname . '/' . $entry;