ordner auslesen - mit gimmicks...?!
Seta
- php
0 suit
0 Seta1 Felix Riesterer
0 suit
0 Felix Riesterer
0 suit
Hallo
ich bin leider nicht sehr gut in PHP, und bräuchte eure Hilfe...
also ich hab da diesen Schnippsel:
<?php
$ordner = "./";
$handle = opendir($ordner);
while ($file = readdir ($handle)) {
if($file != "." && $file != "..") {
if(is_dir($ordner."/".$file)) {
echo "/".$file."<br/>";
} else {
$compl = $ordner."/".$file;
echo "<a href=\"".$compl."\">".$file."</a><br/>";
}
}
}
closedir($handle);
?>
Mit ihm lese ich einen Ordner voller Filme aus
Erstmal würde ich gerne die datei "index.php" nicht anzeigen lassen...
(ich denke ich müsste einfach angeben das ich nur xvid und avi anzeigen lasse aber weis nicht wie.. *heul*)
2tens:
Manche namen beginnen mit: [E]
und namen andre mit: [DOKU]
Kann ich da irgentwie "emblems" also kleine Bilder nebenbei anzeigen lassen?
und als gutes Letztes:
ein name sieht ungefähr so aus:
[E].All.the.Boys.love.Mary.Lane.avi
Kann ich das auch so anzeigen lassen:
All the Boys Love Mary Lane
???
(ich weis das es mandy lane heist^^)
schon einen grossen dank im voraus!
l.g. seta
Erstmal würde ich gerne die datei "index.php" nicht anzeigen lassen...
prüfe die dateiendung, wenn sie nicht deinen wünschen entspricht (dh nicht in einem array an vordefinierten dateinamen steht), gib sie nicht aus
Kann ich da irgentwie "emblems" also kleine Bilder nebenbei anzeigen lassen?
diese "embleme" (übrigens die mehrzahl von emblem) nennen sich "icons" ;)
deine br-sache solltest du dir abschminken und lieber ordentliches html ausgeben (das kann php wunderbar)
<ul class="dateiliste">
<li><a class="file_mkv" href="/videos/foobar.mkv">foobar.mkv</a></li>
<li><a class="file_xvid" href="/videos/foo.xvic">foo.xvid</a></li>
<li><a class="file_zip" href="/videos/pr0n.zip">pr0n.zip</a></li>
</ul>
.file_mkv { background: url(icon_mkv) no-repeat left center; padding-left: 18px; }
unter der annahme, dass das mkv-icon ein 16x16px-icon ist ;)
freie icons findest du übrigens hier silk icons - die verwende ich recht gerne
und als gutes Letztes:
???
ja, das denk ich mir auch - ich versteh nicht, was du meinjst
[latex]Mae govannen![/latex]
freie icons findest du übrigens hier silk icons - die verwende ich recht gerne
Wegen der sechsten Reihe der letzten Spalte im Vorschaubild? :D
Cü,
Kai
Wegen der sechsten Reihe der letzten Spalte im Vorschaubild? :D
na warum sonst? ich verwende ausschließlich dieses icon, wegen der usability :D
Gut...
danke schonmal
Also das das "index.php" und "style.css" nicht angezeigt werden, hab ich so gemacht das sie im Überordner liegen... (sorry hab vorher nicht mitgedacht)
Das mit dem Icons (danke^^) ist mir irgentwie zuuu Kompliziert...
(aber danke für die seite!!!)
Aber:
Kann ich die dateien veileicht Sortiert nach name ausgeben???
(hab gegoogelt, aber finde nur andre scripte die sich nicht mit meinen (das mir aber gefällt) vereinen lassen...)
OK und nochmal, weil das ist mir das wichtigste:
ein dateiname sieht ungefähr so aus:
"[E].All.the.Boys.love.Mary.Lane.avi"
Ich würde aber gerne die "." & "avi" nicht mitanzeigen lassen!?!?
lg. seta
Also das das "index.php" und "style.css" nicht angezeigt werden, hab ich so gemacht das sie im Überordner liegen... (sorry hab vorher nicht mitgedacht)
wenn du für etwas nicht mindestens 5 lösungen hast (ob dämlich oder genial) machst du ohnehin etwas falsch ;) mit der erstbesten lösung loslegen führt selten zum erfolg - aber das kommt mit der erfahrung
Das mit dem Icons (danke^^) ist mir irgentwie zuuu Kompliziert...
2 zeilen sind dir zu komplziert? wenn du sie verstanden hast, wirst du die fragen, warum du bisher alles andere so kompliziert gemacht hast ;)
Kann ich die dateien veileicht Sortiert nach name ausgeben???
sort()
(hab gegoogelt, aber finde nur andre scripte die sich nicht mit meinen (das mir aber gefällt) vereinen lassen...)
ein guter rat, nimm dein script und schmeiss es weg - schreib es stück für stück neu und versteh es, nimm dir dafür eine stunde zeit
readdir Example #1 List all files in a directory
das liefert die kernkomponente für das auslesen - das entspricht etwa deinem bisherigen script, nur ist es kommentiert und verständlich geschrieben ;)
den teil "/* This is the WRONG way to loop over the directory. */" kannst du übriegns rausnehmen - das ist ein bewusst falsches beispiel
wenn du das hast, erstell am besten eine online-version davon (nur eine einzelne solo-datei) und verlink sie her, du wirst sehen, wie einfach das am ende ist ;) also nicht die flinte ins korn werden und sagen "ich will da aber nur das und das ergänzen" das bringt weder dir etwas (weil du nichts dabei lernst) noch den helfenden hier im forum weils nur unnötige informationsweitergabe ist, bei der man genau weiss, dass sie nix bringen wird- das macht keinen spass, und alles was keinen spass macht, macht man nicht gut
nachdem du sicher willst, dass deine sache gut wird, solltest du dich also selbst auch etwas einbringen ;)
du hast warscheinlich eh recht...^^
nja werd ich mal machen, alles was ich wissen muss steht nun eh hier im thread!
danke!
l.g.seta
du hast warscheinlich eh recht...^^
nja werd ich mal machen, alles was ich wissen muss steht nun eh hier im thread!
alles sicher nicht - aber das wichtigste, aber halt dir einfach vor augen:
1. struktur (nur html)
2. erscheinungsbild (css dazu)
3. dynamik (überlegen wie du punkt 1 und 2 dazu bringst, generiert zu werden
kümmere dich primär um einen leeren html dummy der genau das logisch darstellt, was du willst (eine unsortierte liste mit links und klassen für die links, die ihre dateiendungen widerspiegeln). diese liste formatierst du dann mit css deinen wünschen entsprenden - wenn das funktioniert, beschäftige dich damit, wie du exakt diesen code ausgibst bzw mit php erzeugst
sollte der code den du generierst nicht 100%ig mit dem vorher verfassten übereinstimmen, machst du etwas falsch oder hast etwas vergessen
der vorteil an dieser methode ist, du musst von "aussen nach innen" denken und läufst nicht gefahr, mit details zu beginnen
in deinem fall ist das vorgehen "ich will icons vor den dateinamen und die dateiendung weg haben" - ja schon klar, aber du hast noch nichtmal deinen endgüligen soll-zustand definiert (in html-form)
wenn du das alles definiert hast, ist es leichter:
"ich brauche eine liste an dateien"
die generierte liste enthalt dann dateiendungen die du nicht brauchst - zb .php oder .wav
jetzt baust du die routine ein, die die dateiendungen entfernt - wenn das funktioniert, vergleichst du wieder mit deinem soll-zustand und fügst das nächste feature hinzu usw - somit lernst du schritt-für-schritt die nötigen php-funktionen kennen und wirst nicht mit einem fertigen script erschlagen, welches du ohnehin noch nicht verstehst
Liebe Seta,
Dein Problem ist kein sehr großes... ich zeige Dir, warum.
Erstmal würde ich gerne die datei "index.php" nicht anzeigen lassen...
(ich denke ich müsste einfach angeben das ich nur xvid und avi anzeigen lasse aber weis nicht wie.. *heul*)
Das bedeutet, dass Du Dateien mit einer bestimmten Endung gerade _nicht_ anzeigen lassen willst. Dazu kannst Du den "Filter" in Deinem Code etwas erweitern.
if($file != "." && $file != "..") {
Hier "filterst" Du zwei Verzeichniseinträge heraus. Warum solltest Du hier nicht weitere Dinge herausfiltern?
Entweder Du entscheidest Dich dafür, explizit anzugeben, was angezeigt werden darf (sozusagen eine "Whitelist"), oder Du entscheidest, was gerade nicht angezeigt werden darf (also eine Art "Blacklist").
Ich nehme an, dass Du nur .avi und .xvid -Dateien anzeigen lassen willst, oder? Damit könnte man eine Art Whitelist erstellen, indem die Datei eben diese Endung haben muss. Das könnte so gehen:
if (is_dir($file) || preg_match('~(?i)\.(avi|xvid)$~', $file)) {
Diese Zeile ist anstelle der oben zitierten Zeile zu verwenden. Sie erlaubt nur Verzeichnisse, oder Dateien mit der passenden Endung.
Kann ich da irgentwie "emblems" also kleine Bilder nebenbei anzeigen lassen?
Das ist kein Problem. Du hast als Ausgabe diese zwei Zeilen
echo "/".$file."<br/>";
bzw.
echo "<a href="".$compl."">".$file."</a><br/>";
Bei der ersten Zeile handelt es sich offenbar um ein Verzeichnis. Hier willst Du vielleicht ein Ordner-Symbol voransetzen? Nachdem, wie Dein Script gestrickt ist, ist das Ausgeben eines <img>-Elementes an dieser Stelle am sinnvollsten.
echo '<img src="./pfad/zu/ordnersymbol.gif" alt="Verzeichnis" />/'.$file.'<br/>';
Für Dateien passt das auch. Das geht so:
echo '<a href="'.$compl.'"><img src="./pfad/zu/multimediadateisymbol.gif" alt="Filmdatei" />/'.$file.'</a><br/>';
ein name sieht ungefähr so aus:
[E].All.the.Boys.love.Mary.Lane.avi
Kann ich das auch so anzeigen lassen:
All the Boys Love Mary Lane
Dazu müsstest Du eine String-Ersetzung vornehmen, die alle Punkte aus dem String durch ein Leerzeichen ersetzt. Wie ist das allerdings mit dem Punkt und der Dateiendung (.avi oder .xvid)? Soll der mitsamt der Endung verschwinden, oder aber bleiben? Ich entferne ihn in folgendem Beispiel:
$filename = preg_replace('~\.(avi|xvid)$~', '', $file); // Dateiendung weg
$filename = str_replace('.', ' ', $filename); // Punkte ersetzen
echo '<a href="'.$compl.'"><img src="./pfad/zu/multimediadateisymbol.gif" alt="Verzechnis" />/'.$filename.'</a><br/>';
Hilft Dir das irgendwie weiter?
Liebe Grüße,
Felix Riesterer.
if (is_dir($file) || preg_match('~(?i)\.(avi|xvid)$~', $file)) {
warum nicht den dateinahme mit pathinfo zerlegen und die endung dann mit in_array gegen ein array an erlaubten bzw verbotenen dateiendungen prüfen? reguläre ausdrücke schön und gut, aber wenns nicht notwendig ist - warum?
echo '<a href="'.$compl.'"><img src="./pfad/zu/multimediadateisymbol.gif" alt="Verzechnis" />/'.$filename.'</a><br/>';
was spricht gegen meinen vorschlag mit einer klasse sowie dem icon als hintergrundbild?
Lieber suit,
warum nicht den dateinahme mit pathinfo zerlegen und die endung dann mit in_array gegen ein array an erlaubten bzw verbotenen dateiendungen prüfen? reguläre ausdrücke schön und gut, aber wenns nicht notwendig ist - warum?
hmm. Ich liebe reguläre Ausdrücke. Vielleicht liegt es daran...
was spricht gegen meinen vorschlag mit einer klasse sowie dem icon als hintergrundbild?
Der Code des OP. Dort werden keine echten HTML-Elemente ausgegeben, sondern nur Textzeilen mir <br>s. Da versagen Klassen.
Liebe Grüße,
Felix Riesterer.
hmm. Ich liebe reguläre Ausdrücke. Vielleicht liegt es daran...
"Some people, when confronted with a problem, think 'I know, I’ll use regular expressions.' Now they have two problems." --Jamie Zawinski
Der Code des OP. Dort werden keine echten HTML-Elemente ausgegeben, sondern nur Textzeilen mir <br>s. Da versagen Klassen.
ist mir klar, darum hab ich vorgeschlagen, den code vernünftig zu strukturieren - das sollte kein problem sein, da eine liste auszugeben ;)
Grundlage für Zitat #1225.
Lieber suit,
hmm. Ich liebe reguläre Ausdrücke. Vielleicht liegt es daran...
"Some people, when confronted with a problem, think 'I know, I’ll use regular expressions.' Now they have two problems." --Jamie Zawinski
soll heißen...?
Liebe Grüße,
Felix Riesterer.
soll heißen...?
du nimmst sie zu gerne her und verursachst damit probleme, die du vorher nicht hattest ;)
nein, ernsthaft: reguläre ausdrücke sind eine feine sache, aber wenn ich dinge, die ich mit einem simplen suchen/ersetzen oder mit einem simplen suche in string nach exakter zeichenkette erledigen kann, verwende ich keine regulären ausdrücke
einerseits sind reguläre ausdrücke fehleranfällig (dh menschliche fehler, da man sich leicht mal bei einem suchmuster vertut, wenn man etwas erweitert) und auch in viele fällen langsamer als normale stringsuchfunktionen
die geschwindigkeitssache ist hier wohl nicht relevant, wohlaber die fehleranfälligkeit
ich meine, dass eine kommaseparierte wurst an verbotenen zeichenketten leichter zu warten ist, als ein regulärer ausdruck, der diese zeichenketten beinhaltet
$endungen = "foo,bar,baz";
$endungen_arr = explode(',', $verboteneendungen);
$pathinfo = pathinfo('/var/www/htdocs/foobar.foo');
if (in_array($pathinfo['extension'], $endungen_arr)) {
// tu es!
}
eine kommaseparierte liste ist imho sehr einfach zu ändern - wenn aber jetzt im regulären ausdruck der verbotene dateinameerweiterungen sondergeschichten dazukommen, wie zb "$$$" (diverse programme legen tempfiles mit dieser erweiterung an) oder andere exoten, wird das einfache abändern des regulären ausdrucks schon langsam aber sicher "kompliziert", vor allem dann, wenn die liste der verbotenen dateiendungen aus einem konfigurationsfile kommen soll
Lieber suit,
eine kommaseparierte liste ist imho sehr einfach zu ändern - wenn aber [...]
wird das einfache abändern des regulären ausdrucks schon langsam aber sicher "kompliziert"
ja... darum arbeite ich mit einer "Whitelist", die nur exakt zwei Dateiendungen zulassen muss. In dem Falle, den Du beschreibst, wäre mir Deine Lösung tatsächlich lieber. Da stimme ich Deinem Ansatz voll und vorbehaltlos zu.
Liebe Grüße,
Felix Riesterer.