Zum Inhalt springen

Mit PHP überprüfen, ob eine Grafik angezeigt werden kann?


Empfohlene Beiträge

Ich habe ein PHP -Projekt, bei dem der Benutzer nur weitere Aktionen durchführen kann, wenn seine Grafik auch im Browser dargestellt werden kann...

Er soll also nicht weiter machen können, wenn z.B. das "BrokenImage"-Symbol angezeigt wird. Kann ich das irgendwie machen, oder hat jemand ne Idee? :rolleyes:

Vielen Dank schon mal im Voraus.

Link zu diesem Kommentar
Auf anderen Seiten teilen

...wenn seine Grafik auch im Browser dargestellt werden kann...

Dazu kannst du nur einerseits keine externen Links auf Grafiken zulassen, oder die eben immer wieder überprüfen (dazu muss allowfurlopen aber an sein in der php.ini),. Wenn du nur hochgeladene Bilder zulässt, kannst du die Anhand der Endungen prüfen (also nur gif, jpg, png zulassen) und vielleicht noch über die gd-Funktionen o.ä. prüfen (weiss aber nicht, ob das auch so geht). Damit kannst du sicherstellen, dass eine anzeigbare und evtl. funktionierende Grafik hochgeladen wurde. Wass du aber nicht prüfen kannst ist, ob es sich vielleicht nur um ein schwarzes bild handelt o.ä.

Das müsste dann manuell gemacht werden. vielleicht über eine Nachricht an den Mod/Admin, wenn ein Bild geändert wurde o.ä.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja..Danke erstmal an euch.

Viele eurer Vorschläge hab ich bereits ausprobiert.

*Ich lasse den Benutzer Grafiken hochladen, erstelle thumbnails daraus, speichere den Namen in der DB.

Könnte ich generell prüfen, ob die anzuzeigende Grafik überhaupt darstellbar ist, und nicht zum Beispiel das "brokenImage" angezeigt wird. Wär mir im Prinzip egal, ob es ein einfarbiges Bild ist. Ich müsste also prüfen, ob die Grafik "nicht defekt" ist.

Ich hoffe, ich konnts etwas besser erklären. Ist immer etwas schwierig.

Dank euch schonmal im Voraus.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstellt du die Grafik selber oder ist die schon so fertig?

Und zu "defekter Grafik": was heißt für dich "defekt"? Du könntest natürlich durch alle Pixels gehen und gucken, ob du vernünftige Farbwerte bekommst und die mit einer richtigen Grafik vergleichen.... aber das ist a) sehr rechenintensiv und B) auch keine Garantie auf eine "heile" Grafik. Dazu zählen ja auch die Bittiefe, das Format, die Kompression etc. ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich müsste also prüfen, ob die Grafik "nicht defekt" ist.
Und dafür müsstest du erst einmal definiere, was "nicht defekt" für dich bedeutet.

Je nach Browsertyp und -version können unterschiedliche Formate angezeigt werden. Der Firefox z.B. kann in einer Version TIF Bilder auch direkt im Browser anzeigen, der IE hingegen nicht (oder umgekehrt, auf jeden Fall kann einer von beiden nicht mit TIFs umgehen). Broken Image heisst schließlich nicht, dass das Bild an sich nicht okay ist, sondern dass das Bild vom Browser nicht dargestellt werden kann. Das kann daran liegen, dass das Bild generell nicht in Ordnung ist - muss aber nicht.

Das heisst du brauchst ein externes Programm, oder eine PHP Bibliothek, die ein genaues Encoding der Bilder auslesen kann. Dann benötigst du eine Whitelist vom Encodings, die für dich als Okay bzw. "nicht defekt" gelten. Der nächste Schritt ist dann die Überprüfung ob das gefundene Encoding mit einem Whitelist-Encoding übereinstimmt. Dann hast du die gewünschte Info.

Link zu diesem Kommentar
Auf anderen Seiten teilen

...ich müsste also diese grafik prüfen, ob sie überhaupt anzeigbar ist. Ich lasse generell nur .jpg zu. (Lizenz -hickhack mit .gif in der GD-Lib)

Ich will also prüfen, ob die Grafik, die der User hochgeladen hat, überhaupt irgendwie anzuzeigen ist. Es geht mir darum, zu prüfen, was der User hochgeladen hat. Manche User bekommen es hin, dass Sie einen Upload durchführen, ohne dass jemals anzeigbare Grafiken auf dem Server liegen.

Wahrscheinlich übertragen Sie nur Fragmente, oder den Namen , ist zwar schwierig, vielen passierts auch nur durch Zufall. Aber ich würde den Fall gern ausschließen, das auch Benutzer ohne "funktionierende" Grafik weiterarbeiten dürfen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hmm...

Diese "broken Image" soll diese Grafik sein, die der Browser automatisch anzeigt, wenn das Image nicht dargestellt wird?

Ansonsten versuch mal Folgendes:

<?php

// hier müßte dann der Name der hochgeladenen Bildes rein

$dateiname = "image.gif";

$bilddaten = getimagesize($dateiname);

$width = $bilddaten[0];

$height = $bilddaten[1];

$typ = $bilddaten[2];

$htmlcode = $bilddaten[3];

echo "Breite: " . $width . " Hoehe: " . $height . "<br>";

echo "Es ist ein";

if ($typ == 1)

{

echo "GIF";

}

else if ($typ == 2)

{

echo "JPEG";

}

else if($typ == 3)

{

echo "PNG";

}

else if($typt == 4)

{

echo "SWF";

}

else

{

echo "unbekanntes Format";

}

// Grafik ausgeben

echo "<img src=\"$dateiname\" $HTMLCode>";

?>

Ist nicht getestet und soll auch nur zeigen, daß getimagesize() nicht nur die Bilddimensionen ermittelt.

Du müßtest halt nur $bilddaten[2] == 2 für JPEG prüfen. Ich denke, wenn PHP eine jpeg-Datei erkennt, dürfte diese auch darstellbar sein.

getimagesize braucht übrigens auch kein GD, denn

Aus der Funktionsreferenz von php.net:

Note: The getimagesize() function does not require the GD image library.

Returns an array with 4 elements.

Index 0 contains the width of the image in pixels.

Index 1 contains the height.

Index 2 is a flag indicating the type of the image:

1 = GIF,

2 = JPG,

3 = PNG,

4 = SWF,

5 = PSD,

6 = BMP,

7 = TIFF(intel byte order),

8 = TIFF(motorola byte order),

9 = JPC,

10 = JP2,

11 = JPX,

12 = JB2,

13 = SWC,

14 = IFF,

15 = WBMP,

16 = XBM.

These values correspond to the IMAGETYPE constants that were added in PHP 4.3.0. Index 3 is a text string with the correct height="yyy" width="xxx" string that can be used directly in an IMG tag.

Das gemeine an dieser Funktion ist, daß man den Funktionsumfang nicht anhand des Namens erkennen kann. Daher findet man sie auch eher schlecht, wenn man die Funktionen von PHP durchsucht.

getimageinfo oder so, wäre da wohl besser gewesen.

HTH

Gruß vom pelz


Link zu diesem Kommentar
Auf anderen Seiten teilen

...ich müsste also diese grafik prüfen, ob sie überhaupt anzeigbar ist. Ich lasse generell nur .jpg zu. (Lizenz -hickhack mit .gif in der GD-Lib)

Ich will also prüfen, ob die Grafik, die der User hochgeladen hat, überhaupt irgendwie anzuzeigen ist. Es geht mir darum, zu prüfen, was der User hochgeladen hat. Manche User bekommen es hin, dass Sie einen Upload durchführen, ohne dass jemals anzeigbare Grafiken auf dem Server liegen.

Erstmal sind JPEGs ja von jedem Browser anzeigbar. Also eine Typenprüfung hast du ja schon drin. Ob ein Bild jetzt korrekt ist kannst du allenfalls mit den verfügbaren funktionen prüfen, z.B.

http://de2.php.net/manual/de/function.imagecreatefromjpeg.php

Denke mal, bei einem fehlerhaften Bild wird die Funktion auch nen Fehler liefern.

Ansonsten: Manuelle Prüfung vom Mod/Admin, z.B. durch Benachrichtigung bei einer Änderung am Bild.

noch ein kleiner Hinweis:

Sobald etwas im Browser angezeigt wird, ist php schon längst Geschichte. Ein PHP-Dokument wird vom Server immer zuerst durch den PHP-Interpreter gejagt und die Ausgabe von dem (also alles, was nach dem Abarbeiten des Dokuments vom Interpreter wieder ausgegeben wird oder wurde) wird dann an den Browser gesendet. Eine direkte Interaktion Browser <-> PHP ist unmöglich.

Im Browser könntest du das allenfalls (noch nicht probiert) über Javascript lösen. Und zwar dann so, dass du im Javascript das Bild lädst (img = new Image) und darauf vertraust, dass Javascript bei einem fehlerhaften Bild auch nen Fehler bringt. Also im großen und ganzen nix anderes als die Funktion oben, nur mit dem Nachteil, dass die Seite damit erstmal gesendet wird und dann von Javascript nochmal ein aufruf an den Server gemacht werden muss.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...