Warum man Grafiken nicht per PHP ausliefern sollte…

In diesem Artikel möchte Ich euch einmal von meinen Erfahrungen erzählen welche Ich bezüglich des auslieferns von Grafiken via PHP gemacht habe. Zudem werde Ich den Sinn bewerten und auch mal einen Blick in Richtung Performance werfen.

Das Problem!

Fangen wir einfach mal an mit der Frage warum Ich überhaupt was dazu erzählen möchte. Da gibt es eine kleine Hintergrundgeschichte welche Ich euch natürlich nicht vorenthalten möchte. Die Idee zu diesem Artikel kam mir während Ich einen Fehler im phpBB welcher im Zusammenhang mit den Avataren auftrat suchte. Diese wurden nach dem Update schlichtweg als Fehlerhaft vom Browser erkannt. Stimmte aber wie man es ahnt natürlich nicht so ganz, denn sobald man sich einmal in Avatarverzeichnis begab und sich die angeblich fehlerhaften Grafiken anschaute musste man feststellen es ist alles in Ordnung, die Grafiken sind nicht Kaputt. So testete Ich folglich auch ob der Upload diese eventuell korrumpiert, tat er aber nicht. Die Grafiken waren einwandfrei übertragen worden. So begann die Suche nach der Nadel im Heuhaufen. Zunächst betrachte Ich mir die Datei welche schlussendlich die Avatare ausliefert. Diese nennt sich file.php und findet sich im download Verzeichnis. Allerdings findet man hier wenige Anhaltspunkte da sie nur auf eine Funktion in der Datei functions_download.php referenziert. Diese findet man im Verzeichnis includes. Hier sah es schon mal besser aus, der Komplette Code der für die Auslieferung zuständig ist findet sich in besagter Funktion. dort suchte Ich erstmal einmal durch ob eventuell der Mime Type falsch angegeben wird, er wirklich die richtige Datei öffnet und und und… Finden konnte man nichts. Vieles war zudem mit @Operatoren versehen welche Fehler unterdrücken sollen. Eine in meinen Augen sehr unschöne Art der Fehlerbehandlung und es erschwert ungemein die Suche. Somit mussten diese erstmal entfernt werden. Aber auch nach dem entfernen dieser waren wie man es vielleicht ahnt keinerlei Fehler sichtbar. Nun ging Ich noch einen Schritt weiter, entfernte den Mime Type und ließ somit das Bild als einfaches html ausliefern. Was mich wenig überrascht hat: Es wurde der Inhalt der entsprechenden Grafik geliefert. Das sagte schon einmal das dass Bild an sich ist da und auch wie oben bestätigt gelesen wird. Also versuchte Ich einfach mal dieses zu speichern. Das klappte auf Anhieb und Ich erhielt ein Bild welches man direkt mit Irfanview öffnen konnte. Also lag auch kein Fehler in der Übertragung vor und Ich stand wieder am Anfang. Was man aber dazu noch erwähnen muss ist, dass die Attachments im Forum selbst welche auch per file.php und functions_download geliefert werden funktionierten. Das verwirrte mich umso mehr und Ich war schon kurz vor der Verzweiflung als mir durch ein wenig lesen im Support Forum etwas wieder einmal bewusst wurde… Es gibt im phpBB eine Datei welche ja nun wirklich überall mit eingebunden ist. Drei mal darf man nun raten wo der Fehler lag. Richtig in der config.php und wer sich nun fragt was da denn falsch sein kann, dem sei es hiermit verraten: _.

Die Lösung…

Wer sich jetzt nur denkt spinnt der, nein gewiss nicht, es war ein Leerzeichen welches sich an den Anfang der Datei geschummelt hat und damit auch bei den Grafiken, welche ja erst durch das erwähnte PHP-Skript müssen, immer noch vor dem eigentlichen Dateiinhalt geschrieben wurde. Dieses Leerzeichen sorgt für die Fehlerhafte Grafik. Durch dieses kann der Browser die Datei nicht mehr als Grafik erkennen da er den Mime welcher auch in der Datei steht ja immer abgleichen möchte. Bis man auf diese Art des Fehlers kommt vergehen schon einige Tage und Ich finde es persönlich sehr ärgerlich. Die hier aufgewendete Zeit hätte man sinnvoller nutzen können.

Was ist der Sinn dahinter?

Mir erschließt sich auch bis heute nicht wirklich der Sinn Avatare durch PHP zu jagen. Ich meine das ganze frisst unnötige Ressourcen. Je nach Bildgröße auch nicht gerade wenig Ram. Also was soll das ganze? Wer da eine Idee hat kann mir gerne einen Kommentar schreiben. Das es auch anders geht zeigt ja MyBB dort werden die Avatare als normale Grafik geliefert und gespeichert, beides Dinge die phpBB nicht tut. Bei Dateianhängen an sich erschließt sich mir das ganze vielleicht gerade noch so. Auch wenn Ich hier ebenfalls meine das man dass ganze Sinnvoller und simpler machen könnte. Denn jeder Skriptaufruf ist teuer…

Fazit: Grafiken sollten wegen der Performance und Fehlersuche nicht mit PHP ausgeliefert werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.