dateien sollen nur dateiname, keine endung haben
pascal
- php
3 Fabian St.1 Vinzenz Mai0 pascal1 wahsaga0 Daniel
1 Fabian St.0 Daniel0 Fabian St.0 Daniel
0 Cybaer
hallo Forum
Ich hab da ein kleines Problem: Wie kann ich ein Verzeichnis öffnen und dann die Dateien nur in einem DropdownMenu anzeigen lassen?
bis jetzt habe ich:
<?php
$verzeichnis = "texte";
echo "<select name="templates">\n";
$verzeichnis_handle = opendir("$verzeichnis");
while ($file = readdir ($verzeichnis_handle)) {
if ($file != "." && $file != "..") {
echo "<option value="$verzeichnis/$file" id="$file">$file</option>\n";
}
}
echo "</select name>\n";
?>
Nun möchte ich jedoch, dass die variable $file nur dem Dateinamen (ohne Endung) entspricht.
Wie muss ich das anstellen?
Vielen Dank für eure Hilfe Pascal
Hi!
[...]
while ($file = readdir ($verzeichnis_handle)) {
[...]
Das sollte besser so sein:
while(($file = readdir($verzeichnis_handle)) !== FALSE)
Ansonsten würde deine Schleife abbrechen, wenn es beispielsweise eine Datei «0» gäbe.
Nun möchte ich jedoch, dass die variable $file nur dem Dateinamen (ohne Endung) entspricht.
Hierzu sollte dir substr() weiterhelfen.
Grüße,
Fabian St.
Hallo Fabian
Hierzu sollte dir substr() weiterhelfen.
Und ggf. noch ein paar Stringfunktionen mehr, interessant dazu ist die Diskussion in </archiv/2004/11/t94245/#m570226>.
Freundliche Grüße
Vinzenz
hallo
naja, das hat leider nicht ganz geklappt. zuerst hatte ich das hier:
$rest = substr("$file", 0, -1);
Doch das hat nicht geklappt. Also es wurde nichts ausgegeben.
nachher Habe ich noch die Lösung von Vincent versucht, doch auch das scheiterte.
Wenn ich es aber mit einem Text, also keiner Variable gemacht habe, klappte es.
Wo ist da nur der Fehler!?
Mfg Pascal
hi,
$rest = substr("$file", 0, -1);
warum steht $file hier in anführungszeichen? absoluter unfug, weg damit.
Wenn ich es aber mit einem Text, also keiner Variable gemacht habe, klappte es.
dann enthält deine variable vermutlich nicht das, was du annimmst.
Wo ist da nur der Fehler!?
wo ist deine kontrollausgabe des variableninhaltes?
gruß,
wahsaga
Hi,
Wenn ich es aber mit einem Text, also keiner Variable gemacht habe, klappte es.
dann enthält deine variable vermutlich nicht das, was du annimmst.
Meines Errachtens nach umgiebt die Variable ein " das stört. beim text störts natürlich nicht.
MfG
Hi!
$rest = substr("$file", 0, -1);
Doch das hat nicht geklappt. Also es wurde nichts ausgegeben.
nachher Habe ich noch die Lösung von Vincent versucht, doch auch das scheiterte.Wenn ich es aber mit einem Text, also keiner Variable gemacht habe, klappte es.
Der Link von Vinzenz zeigt dir bereits eine Reihe von Schwierigkeiten auf, die sich hierbei ergeben. Was willst du mit deiner Anweisung erreichen? Der Ausdruck $rest = substr($file, 0, -1) weist der Variablen $rest den letzten Buchstaben von $file zu.
Folgendes Beispiel sollte dir da schon eher weiterhelfen:
echo substr($file, 0, strrpos($file, '.'));
Dies gibt dir den Dateinamen ohne die Endung aus. Dabei ist es egal, ob eine Endung drei Zeichen lang ist (wie z.B. php) oder vier (--> jpeg). Dennoch behandelt dieser Fall auch nicht die Möglichkeit, dass eine Datei den Namen «foobar.tar.bz2» haben könnte - so würde hier «foobar.tar» ausgegeben werden.
Will man diesen Fall auch noch berücksichtigen, so müsste man sich noch etwas einfallen lassen...
Grüße,
Fabian St.
Hi,
echo substr($file, 0, strrpos($file, '.'));
>
> ... so würde hier «foobar.tar» ausgegeben werden.
AFAIK falsch. denn AFAIK liefert strrpos die letzte position und wenn du die letzte position als länge nimmst dann hast du foobar.tar. evt. könnt strpos noch abhilfe schaffen da strpos die erste position liefert. Je Nachdem sollte man zuvor ein If block setzte. alla
if(strpos($file, ".") === strrpos($file, '.'))
{
echo "nur ein punkt";
}
Hi!
echo substr($file, 0, strrpos($file, '.'));
> >
> > ... so würde hier «foobar.tar» ausgegeben werden.
>
> AFAIK falsch. denn AFAIK liefert strrpos die letzte position und wenn du die letzte position als länge nimmst dann hast du foobar.tar. evt. könnt strpos noch abhilfe schaffen da strpos die erste position liefert. Je Nachdem sollte man zuvor ein If block setzte. alla
Nein, das stimmt schon. Schaue dir mal folgendes Beispiel an:
$file = 'foobar.tar.bz2';
\-------------------------------------------------------
f | o | o | b | a | r | . | t | a | r | . | b | z | 2 |
\-------------------------------------------------------
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |10 |11 |12 |13 |
\-------------------------------------------------------
Beim Zählen von Strings beginnt PHP - wie beinahe jede andere Programmiersprache auch - bei 0. strrpos($file, '.') sucht das letzte Vorkommen des gesuchten Zeichens (--> '.') und liefert die Position, die es im String $file besitzt. In unserem Fall also 10. Daher würde auch substr($file, 0, 10) - wie von mir beschrieben - den String foobar.tar zurückliefern, da man \_hier\_ mit eins zu zählen beginnt: 1 => f, 2 => o, 3 => o, 4 => b, etc.
Wie die nun siehst, stimmt meine obige Aussage sehr wohl \*g\*
Grüße,
Fabian St.
--
Selfcode: [ie:{ fl:( br:> va:) ls:\[ fo:) rl:( n4:( ss:) de:> js:| ch:? mo:) zu:)](http://www.peter.in-berlin.de/projekte/selfcode/?code=ie%3A%7B+fl%3A%28+br%3A%3E+va%3A%29+ls%3A%5B+fo%3A%29+rl%3A%28+n4%3A%28+ss%3A%29+de%3A%3E+js%3A%7C+ch%3A%3F+mo%3A%29+zu%3A%29)
Hi,
da man _hier_ mit eins zu zählen beginnt: 1 => f, 2 => o, 3 => o, 4 => b, etc.
nicht ganz, es ist die anzahl und nicht die pos. ein $file, "0", "0" bringt nix, da er ja die länge 0 hat, strlen, ist da der übeltäter.
Wie die nun siehst, stimmt meine obige Aussage sehr wohl *g*
jupp, ist einleuchtend gut erklärt. wobei ich mir ja nicht sicher war,
strpos, strlen etc. ist ja alles etwas anders. und strlen, ist der
übeltäter welcher mich des öfteren zur weisglut bringt wegen dem ab und
an mal vergessenen -1 in gewissen fällen. schrecklich.
MfG
Hi!
da man _hier_ mit eins zu zählen beginnt: 1 => f, 2 => o, 3 => o, 4 => b, etc.
nicht ganz, es ist die anzahl und nicht die pos. ein $file, "0", "0" bringt nix, da er ja die länge 0 hat, strlen, ist da der übeltäter.
Ich versteh nicht ganz, was du mir hiermit sagen willst ;-)
Wie die nun siehst, stimmt meine obige Aussage sehr wohl *g*
jupp, ist einleuchtend gut erklärt. wobei ich mir ja nicht sicher war,
strpos, strlen etc. ist ja alles etwas anders. und strlen, ist der
übeltäter welcher mich des öfteren zur weisglut bringt wegen dem ab und
an mal vergessenen -1 in gewissen fällen. schrecklich.
Die Funktion strlen() gibt dir - wie der Name bereits sagt - die Länge eines Strings als Integer-Wert zurück. Hier wäre es absolut unsinnig, wenn man bei 0 anfangen würde, da es ja dann nicht die Länge wäre. Demnach ist das Verhalten von strpos, strrpos, strlen und den anderen String-Funktionen ganz logisch und es funktioniert, wie es soll.
Grüße,
Fabian St.
Hi,
Nun möchte ich jedoch, dass die variable $file nur dem Dateinamen (ohne Endung) entspricht.
Z.B. so:
$file=filename($file);
function filename($file,$nosuffix=TRUE) {
// Dateinamen ermitteln
$filename=basename($file);
// Wenn Dateiendung nicht erwuenscht ...
if($nosuffix) {
// ... Position der Endung ermitteln ...
$extPos=strrpos($filename,'.');
// ... und Dateinamen ggf. kuerzen
if($extPos) { $filename=substr($filename,0,$extPos); }
}
return $filename;
}
Gruß, Cybaer