[Gelöst]Typ eines per PHP erzeugten Bildes herausfinden

Hallo zusammen

Ich habe folgendes Problem:
Ich habe ein PHP-Script, das mir entweder ein JPG-Bild erzeugt, oder im Fehlerfall, eine HTML-Fehlermeldung herausgibt.
Dieses PHP-Script wird auf einer anderen Seite per aufgerufen.

Nun möchte ich aber, dass die aufrufende Seite unterscheiden kann, ob das, was von script.php her kommt, ein Bild ist oder HTML-Code.

Wie mache ich das am schlausten?

Was ich schon versucht habe:

  • file_get_contents: Führt das PHP-Script bei mir leider nicht aus sondern importiert es 1:1 als Text
  • fsockopen: mühsam, weil Dateien in einem passwortgeschützten Bereich liegen
  • exif_imagetype: Erkennt PHP nicht als Bild an
  • getimagesize: Erkennt PHP nicht als Bild an

Eigentlich müsste script.php ja einfach ausgeführt werden und das Resultat ausgewertet werden, aber irgendwie kriege ich das gerade nicht auf die Reihe… :unamused:

Vielen Dank schonmal für eure Hilfe

Möglichkeiten:
a) Das Skript schreibt in eine Datei und man untersucht dann diese
Datei, nicht das Skript (letzteres kann ja nicht klappen)
b) man bindet das Skript etwa per include ein und läßt die Ausgabe
in einen Puffer schreiben. Das Skript kann dann ja selbst Auskunft
darüber geben, was es erzeugt hat - danach richtet sich dann,
was man mit dem Puffer macht.
c) Man bindet den Kram mit object oder iframe ein, nicht mit img,
dann sollte es egal sein, was für ein Format erzeugt wird.

Eleganter und schlauer ist es natürlich, das Skript so weit zu
entwickeln, daß keine Fehlermeldungen auftreten oder die etwa
in Pixelgraphik umgewandelt werden und in das Bild integriert,
dann tritt das Problem nicht auf.

Ansonsten - bei img fehlt das Attribut alt, dessen Inhalt sollte sich
ja auch danach richten, was mit dem Skript erzeugt wird.

Um was für Fehlerfälle handelt es sich?

Hallo zusammen

Vielen Dank hoffmann für die Hilfe, es funktioniert jetzt.

Ich habe jetzt die Möglichkeit mit dem Puffer gewählt. Ich habe schon vorher daran herumstudiert, aber habe die Idee wieder verworfen, weil ich irgendwie nicht auf die richtige Lösung gekommen bin.

Es handelt sich um ein Säulendiagramm, das Daten aus einer Datenbank grafisch darstellt. Die dargestellten Daten lassen sich durch eine Suche einschränken. Den Fehler, den ich hier behandeln wollte, war, dass die Suche keine Resultate liefert.
Das Diagramm-Script (habe ich nicht selbst geschrieben) liefert zwar in diesem Fall schon ein Bild mit einer Fehlermeldung, aber das gefällt mir nicht, deshalb wollte ich den Fehler vorher abfangen und meine eigene Fehlermeldung bringen.

ps: das alt-Attribut im img habe ich schon drin, sowie height, width etc. Das hier war nur ein Beispiel :slight_smile:

Für sowas böte sich ja auch eine Ausgabe in SVG an - zumal man
da zum einen Text als Text integrieren kann, aber auch XHTML in
foreignObject.

Dürfte bei einem Fertigskript allerdings etwas kniffliger sein, weil
man da alles rauswerfen kann, was mit der GD-Bibliothek zu tun
hat, die braucht man für SVG natürlich nicht ;o)

Die Variante mit dem Puffer ist an sich nur für neuere browser gut
geeignet, zumindest wenn man den Puffer dann mittles data:
direkt ins Attribut src von img schreiben will, was soll man sonst
mit dem Puffer mit Bildinhalt innerhalb eine (X)HTML-Ausgabe
anstellen?

Es handelt sich dabei um JPGraph (http://jpgraph.net/).
Alles, was ich machen muss, ist ihm die Daten zu geben und festzulegen, wie der Graph aussehen soll :wink:
(klar könnte man das ganze wahrscheinlich noch schöner lösen, wenn man es selber programmieren würde… Aber für das, für was ich es brauche, hätte sich der Aufwand nicht gelohnt…)

Aber ja, das nähme mich noch wunder: wie kann ich den Puffer direkt ins src-attribut schreiben? Daran bin ich nämlich gescheitert…
Habe schlussendlich einfach den Puffer verworfen und die Datei nochmals verlinkt…

en.wikipedia.org/wiki/Data_URI_scheme

Kannst du nicht einfach zuvor testen, ob die Datenbankabfrage überhaupt Ergebnisse liefert, ohne das Bild abzurufen?

Danke für den Tip mit data:, funktioniert jetzt :slight_smile:

Die DB-Abfragen werden im Script gemacht, das das Bild erstellt (und dieses wird von einem anderen Script eingebunden). Somit müsste ich entweder zweimal die selbe Abfrage starten, oder die Abfrage-Resultate vom einen Script ins andere übergeben. Und da ich jetzt keine Lust habe, das alles umzustellen, jetzt wo es funktioniert, lasse ich es einfach mal wie’s ist :wink:

Danke allen für die Hilfe!

Naja, wie du willst. Ich hätte die Abfrage in ein weiteres Skript ausgelagert und das bei beiden Skripten per include eingebunden. Zum überprüfen, ob Daten vorhanden sind, würde dann die Abfrage mit LIMIT 1 ausgeführt, ansonsten normal.