Anhand des Dateinamens die Priorität erkennen
N2O
- php
Hallo!
Wer weiß eine Lösung für dieses Problem?:
Angenommen, ich habe in einem Ordner viele txt-Dokumente, die von 001 bis 999 beziffert werden können. Alle diese Dateien enthalten PHP-Variablen (z.B. Inhalt von "001.txt" <?PHP $name="Der Name von 001";?>). Dann habe ich eine andere PHP-Datei, die die _fünf aktuellsten_, das heißt die fünf _derzeit_ höchsten Zahlen ermitteln soll. Also Beispiel: Ich habe Dateien von 001.txt bis 015.txt, dann muss die Datei wissen, dass 015.txt die höchste Zahl ist. Die weiteren 4 Dateien könnte man dann ja mittels Rechenoperation schnell feststellen. Es geht mir also um den Punkt, wie man feststellt, dass 015.txt die derzeit größte Datei auf dem Server ist. Wenn dann natürlich eine 016.txt dazukommt, soll das dann selbstverständlich die größte sein.
Geht sowas überhaupt mit PHP, oder muß ich da zu JavaScript oder so greifen? Bitte kein SQL!
Besten Dank für die Aufmerksamkeit.
Gruß
Lachgas
Hallo Lachgas,
das läßt sich doch alles über Schleifen regeln:
$dir=opendir($verzeichnis_name);
while($f=readdir($dir))
{
if($f!='.' && $f!='..' && is_file($verzeichnis_name.'/'.$f))
{
$b=explode('.',$f);
$a[$b[0]]=$f;
}
}
for($i=0;$a[$i];$i++);
echo $i;
$i ist dabei die Datei mit dem höchsten, aufeinander fortfolgenden Wert ($b[0]). Daraus leitet sich auch ab, das Du keine Lücken haben darfst!
Gruß aus Berlin!
eddi
Hallo und Danke erstmal.
Leider muss ich aber zugeben, dass ich noch ein blutiger Anfänger bzgl. PHP bin und gerade erst von HTML umgestellt habe. Also habe ich noch einige Fragen.
$dir=opendir($verzeichnis_name);
Ok. Kapiert. $verzeichnis_name ist meinetwegen = "texte"
while($f=readdir($dir))
Auch kapiert.
{
if($f!='.' && $f!='..' && is_file($verzeichnis_name.'/'.$f))
Erste Frage: Was bedeuten diese ganzen Angaben? Fehlt da nicht die Angabe, dass es sich ja um TXT-Dateien handelt, also 001.txt?
{
$b=explode('.',$f);
$a[$b[0]]=$f;
}
Teilweise kapiert ;-). $b ist der höchste Wert in $f. aber was ist $a.
}
for($i=0;$a[$i];$i++);
Verstehe ich irgendwie auch nicht.
Also, wenn jemand die Zeit (und die Lust) hat, das zu erklären, dann wäre ich froh.
Sorry für die vielleicht eurer Ansicht nach dümmlichen Fragen.
Gruß
Lachgas
Re:
Leider muss ich aber zugeben, dass ich noch ein blutiger Anfänger bzgl. PHP bin und gerade erst von HTML umgestellt habe. Also habe ich noch einige Fragen.
Dein Weg zum Glück: http://de3.php.net/manual/de/ ;)
if($f!='.' && $f!='..' && is_file($verzeichnis_name.'/'.$f))
Erste Frage: Was bedeuten diese ganzen Angaben? Fehlt da nicht die Angabe, dass es sich ja um TXT-Dateien handelt, also 001.txt?
Für diesen Zusammenhang bedeutet dies in Worten ausgeschrieben etwa folgendes:
Wenn (if) der ausgelesene Verzeichniszeiger/Dateiname ($f) kein (!=) Punkt ('.') ist und (&&) Verzeichniszeiger/Dateiname ($f) kein (!=) PunktPunkt/übergeordnetes Verzeichnis ('..') ist und (&&) die Funktion is_file() TURE zurückgibt,
http://de3.php.net/manual/de/function.is-file.php
http://de3.php.net/manual/de/language.operators.php
Diese if-Anweisung geht davon aus, das nur Datein vom Namen [Zahl].txt enthalten sind, daher ist auch keine abfrage, ob es eine TXT-Datei ist, enthalten.
{
$b=explode('.',$f);
$a[$b[0]]=$f;
}
Teilweise kapiert ;-). $b ist der höchste Wert in $f. aber was ist $a.
$b ist dabei der Teil des Dateinamen, der vor dem Punkt steht. http://de3.php.net/manual/de/function.explode.php
(Dabei fällt mir auf, die Dateinamen dürfen für dieses Beispielscript keine Nullen am anfan haben; also "1.txt" und "325454643.txt")
$a ist dabei ein Datenfeld (http://de3.php.net/manual/de/language.types.array.php). Datenfelder haben die überaus angenehme Eigenschaft sich mit Schleifen (for() while() foreach()) auswerten zu lassen
}
for($i=0;$a[$i];$i++);
Verstehe ich irgendwie auch nicht.
http://de3.php.net/manual/de/control-structures.for.php
Gruß aus Berlin!
eddi
Oh Mann, Danke für die Mühe! Du hast mich echt einen ergeblichen Schritt weitergebracht. Auch die Links sind sehr gut.
Vielen Dank also,
Gruß
Lachgas