php: läsa filer i alfabetisk ordning

Tråden skapades och har fått 5 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Göteborg
  • 2004-03-02 19:51

Hej!

Jag använder ett vanligt litet php komando för att läsa av filer från en katalog (se nedan). När jag kör denna på min lokala mac går allting frid och fröjd och filerna visas i alfabetisk ordning.
Däremot, när jag kopierar över sidorna och filerna till en linux webbserver, så läser den av filerna i vilken ordning som helst. På ett ställe är det alfabetiskt, ett annat det omvända och på ett tredje är det helt slumpmässigt (ur alfabetisk synpunkt).
Vad är det som spökar?
Jag har försökt att återskapa problemet lokalt genom att ändra visningsalternativen för de aktuella mapparna i Finder, men det har ingen inverkan på hur filerna läses av php. (vilket känns naturligt då Finder borde sköta sitt via .DS_Store-filen som säkert inget annat program - bla php - bryr sig om.)

Finns det motsvarande inställningar i Linux som kan påverka php?
Kan dessa inställningar påverkas av en windowsburk som bläddrar runt i dessa kataloger via fildelning (smb?)?
Hur återställer jag ordningen?

While($currentfile = readdir($handle))
{
echo $currentfile.'<br/>';

Lösningsförslag:

Lista mappinnehållet och in med det i en array, sortera denna och skriv ut.

<?php

$mapp = dir(".");
while ($fil = $mapp->read()) 
	{
		if ((($fil != ".") || ($fil != "..")) && (!is_dir($fil))) 
			{
			$fillista[] = $fil;
			}
	}

asort($fillista);

while (list ($key, $val) = each ($fillista)) 
	{
		print $val . "<br>";
	}
?>

//Mikael

  • Medlem
  • Göteborg
  • 2004-03-02 23:01

OK, tack Mikael, det där skulle kunna gå. Även om det blir lite omständigt om man skall ha det överallt man listar av filer. Å andra sidan kan man utnyttja det för att lista av det i annan ordning.

Det löser problemet men det svarar inte på min fråga om orsaken...

  • Medlem
  • 2004-03-02 23:35
Ursprungligen av pichia:

OK, tack Mikael, det där skulle kunna gå. Även om det blir lite omständigt om man skall ha det överallt man listar av filer.

Du skulle kunna göra en funktion av de så slipper du skriva all kod varje gång du vill lista filer. Dår räcker det med funktionen...

Ursprungligen av pichia:

Det löser problemet men det svarar inte på min fråga om orsaken...

Orsaken har jag inte en aning om tyvärr

Ursprungligen av pichia:

Vad är det som spökar?

Datorn tar saker i nummerordning. Har för mig (men är inte säker på) att php använder i-nodsnummerordning. Alltså måste man sortera (om man nödvändigtvis vill ha bokstavsordning)

Ursprungligen av pichia:

While($currentfile = readdir($handle))
{
echo $currentfile.'<br/>';
}

anses (enligt manualen) inte vara snygg kod dessvärre. Jag skulle ha använt (som också rekommenderas i PHP-manualen och förutsatt att din PHP är minst 4.0.0)

while (false !== ($currentfile = readdir($handle))) {
       echo "$currentfile<br />";
   }

Min annorlunda formatering spelar naturligtvis ingen roll och
Windowsburkens kontakt med din burk har ingenting med saken att göra. Den orsakar ju bara att php-koden körs. PHP är boven i dramat.

  • Medlem
  • Göteborg
  • 2004-03-03 08:23
Ursprungligen av scorpion:

Jag skulle ha använt (som också rekommenderas i PHP-manualen och förutsatt att din PHP är minst 4.0.0)

while (false !== ($currentfile = readdir($handle))) {
       echo "$currentfile<br />";
   }

Jo. Jag är medveten om detta. Jag försökte använda koden i den formen, men fick i samma väva en massa, för mig, helt oförklarliga parse error (det är väl parentesfel) och gick därför tillbaka till den först inlärda felaktiga, men fungerande, syntaxen för att eliminera en av osäkerhetsfaktorerna. Det finns nog mycket jag skulle kunna snygga upp i min nybörjarkod...

1
Bevaka tråden