Dateiendung wird nicht ausgegeben

Jennesta

Erfahrenes Mitglied
Hallo,
ich lasse mir auf meinem Webspace automatisch meine Datein ausgeben und ich lasse mir je nachdem, welche Dateiendung ich habe noch ein anderes Icon anzeigen. Bisher funktionierte alles wunderbar, doch irgendwie ist mir aufgefallen, das je nach Dateinamen das Icon nicht angezeigt wird oder aber korrekt wie gewünscht. Der Code sieht folgendermaßen aus:

PHP:
$fileinfo = pathinfo($file);
				$fileextension = $fileinfo["extension"];
				echo $fileextension; // eingefügt um vorher schon zu sehen, dass hier der Fehler drüber liegt.
				if(strtolower($fileextension) == "cpp") $icon = "<img src='graphics/icons/cpp.png' class='dateilinkbild'>";
				elseif(strtolower($fileextension) == "c") $icon = "<img src='graphics/icons/c.png' class='dateilinkbild'>";
				elseif(strtolower($fileextension) == "h") $icon = "<img src='graphics/icons/h.png' class='dateilinkbild'>";

So wenn ich zb dan Dateinamen "ta2_Codevorlage.cpp" oder "ImageViewer.cpp" habe wird weder beim echo was angegeben noch dem $icon etwas zugewiesen. Wenn ich diese Dateien umbenenne zb in "bla.cpp" wird erst cpp ausgegeben und dann das $icon zugewiesen.
Ich habe auch php-Manual keinen Kommentar dazu gefunden woran das liegt.
Eine Vermutung wäre wegen dem Unterstrich oder vll sogar dem Großbuchstaben im Dateinamen, aber ich bin hier unsicher...

Kann mir hier einer auf die Sprünge helfen und hat evtl denselben Fehler?

Grüße Jennesta
 
Hi,

ich kenne das Problem zwar nicht, aber würde evtl. vorschlagen, stattdessen reguläre Ausdrücke dafür zu verwenden. Versuch es doch mal damit:

PHP:
$filename = basename($file);
if(preg_match('/\.(.*)$/', $filename, $match))
{
    $fileextension = $matches[1];
}
 
Bei regulären Ausdrücken könnte es aber evtl. zu Problemen kommen, wenn in dem Dateinamen ein weiterer Punkt vorkommt. Sollte das nicht auszuschließen sein, wäre eine weitere Alternative der Substring.
PHP:
 fileextension = substr($filename, -3);
 
Und da nicht jede Endung 3 Zeichen hat:

PHP:
$endung = substr($name, strrpos($name, '.')+1);

Wobei ich sagen muss die Lösung mit regulären Ausdrücken ist besser, vor allem wenn auch mal Dateien ohne Endung kommen ;)
 
Jede dieser Varianten hat ihre Vor- und Nachteile. Welche davon am besten paßt, mußt du für dich selbst entscheiden. Wenn du selbst für die Dateinamen verantwortlich bist, kannst du dir die beste aussuchen. Wenn nicht, muß evtl. noch was komplizierteres her, z.B. in Verbindung mit Anzahl der Punkte.
 
Hey, vielen Dank. Habe nun einfach den Code bisschen geändert. Woran es genau lag habe ich nichtmehr erfahren ist mri aber auch egal aus zeitgründen habe ich nun einfach die Variante mit dem Unterscheiden von mehreren Punkten genommen.
 
Zurück