Jake Bot Geschrieben 4. November 2005 Geschrieben 4. November 2005 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? Vielen Dank schon mal im Voraus. Zitieren
etherius Geschrieben 4. November 2005 Geschrieben 4. November 2005 Hä? kannst du das vielleicht noch etwas näher erläutern was du vor hast? Zitieren
Schiller256 Geschrieben 4. November 2005 Geschrieben 4. November 2005 Überprüfe doch mit file_exists() ob das Bild auf dem Server vorhanden ist. Wenn ja kannst du einfach alles weitere Ausgeben, wenn nicht dann eben Fehlerbehandlung. http://de2.php.net/file_exists Zitieren
geloescht_JesterDay Geschrieben 4. November 2005 Geschrieben 4. November 2005 ...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.ä. Zitieren
Jake Bot Geschrieben 4. November 2005 Autor Geschrieben 4. November 2005 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. Zitieren
sockä Geschrieben 4. November 2005 Geschrieben 4. November 2005 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 auch keine Garantie auf eine "heile" Grafik. Dazu zählen ja auch die Bittiefe, das Format, die Kompression etc. ... Zitieren
perdian Geschrieben 4. November 2005 Geschrieben 4. November 2005 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. Zitieren
Jake Bot Geschrieben 4. November 2005 Autor Geschrieben 4. November 2005 ...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. Zitieren
pelz Geschrieben 6. November 2005 Geschrieben 6. November 2005 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 Zitieren
geloescht_JesterDay Geschrieben 7. November 2005 Geschrieben 7. November 2005 ...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. Zitieren
Empfohlene Beiträge
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.