[PHP] Thumbnails
-
Ich brauche für mein Projekt die Möglichkeit Thumbnails mit PHP dynamisch zu erstellen, dazu habe ich mich bisher des Thumbnail-Script von Christian Lamine bedient, das kleine und handliche Skript kann man sich hier anschauen: http://www.flashdreams.de/tuts/php-tutorials/phpthumbnails.html
Nun hat die ganze Sache auf dem Server bis vor 3 Wochen noch problemlos funktioniert, aber irgendwie verweigert mir das Skript jetzt die Arbeit und es werden nur tote Bilder angezeit. Ich tippe darauf, dass der Provider irgendwie an der GD-Version rumgespielt hat, ist dies der Fall ? - PHPINFO sagt folgendes zu GD:GD Support enabled GD Version bundled (2.0 compatible) FreeType Support enabled FreeType Linkage with freetype T1Lib Support enabled GIF Read Support enabled JPG Support enabled PNG Support enabled WBMP Support enabled
Oder wüsste jemand andere Gründe, warum das Skript auf einmal versagt
-
Du bekommst aber keine Fehlermeldungen?! Du könntest aber mal versuchen den Fehler etwas genauer zu lokalisieren
-
Das Problem ist leider, dass ich auch nicht mehr weiß. Aber der Fehler muß irgendwo an dieser Stelle liegen (btw, die Bilder welche verkleinert sind, werden per Webupload hochgeladen):
Header ("Content-Type: image/".$types[$imagedata[2]]); if ($makethumb) { $image = call_user_func("imagecreatefrom".$types[$imagedata[2]], $image); $thumb = imagecreate ($x, $y); imagecopyresized ($thumb, $image, 0, 0, 0, 0, $x, $y, $imagedata[0], $imagedata[1]); call_user_func("image".$types[$imagedata[2]], $thumb, $cachedir.$thumbfile); imagedestroy ($image); imagedestroy ($thumb); $image = $cachedir.$thumbfile; } // ... laden wenn es im Cache ein entsprechendes Bild gibt $image = fopen ($image, "rb"); fpassthru ($image); fclose ($image);
-
Hast du mal gesachaut, ob die Funktionsnamen richtig zusammengesetzt werden (z.B. "imagecreatefrom".types[imagedata[2]])
-
Wie schon gesagt, das Skript hat vor 3 - 4 Wochen noch einwandfrei funktioniert, deshalb würde ich einen Fehler im Code eher ausschließen und eher richtig GD oder PHP-Version tippen.
-
Ich kann dann eigentlich auch nicht mehr groß was dazu sagen
Du musst eben versuchen den Fehler so weit wie möglich einzugrenzen (also schauen, wo das Script nicht mehr so läuft wie es soll
Ist z.B. $image zu Beginn der richtige Pfad und dann ein korrektes Bild und wie sieht $thumb nach imagecopyresized aus? Arbeitet ectl. imagecopyresized nicht mehr richtig - imagecopyresampled?
-
Hm, ok, ich hab das mal ein wenig genauer untersucht und bin jetzt eigentlich noch verwirrter als vorher, der Fehler liegt nämlich genau an dieser Stelle:
$image = fopen ($image, "rb"); // $image ist ordentlich // gesetzt und fopen ist erfolgreich fpassthru($image); // irgendwie funktioniert das nicht, // die Funktion gibt immer false zurück ??? fclose ($image);
-
Sprich das TN-Image liegt richtig auf der Server-Platte?! Hast du es mal mit readfile anstelle von fopen/fpassthru/fclose versucht?
-
Hm, also ich habe das ganze mal ein wenig verändert, so:
if(!file_exists($image)) echo("Bild (" . $image . ") nicht vorhanden !"); if(!is_readable($image)) echo("Bild nicht einlesbar !"); if(!is_writable($image)) echo("Bild nicht einlesbar !"); if(!readfile($image)) echo("Ausgabe des Bildes (" . $image . ") schlug fehl !!!");
Als Ausagebe bekomme ich dann dies hier:
*
Bild (bilder/cache/13.jpg) nicht vorhanden !
Bild nicht einlesbar !
Bild nicht einlesbar !
Ausgabe des Bildes (bilder/cache/13.jpg) schlug fehl !!!
*Obwohl das Bild eindeutig vorhanden ist findet er es nicht
Wenn ich die komplette URL angebe meckert er schon viel früher, dass es die Datei nicht finden konnte, obwohl die mit dem Browser über diese Adresse erreichbar ist. Die Zugriffsrechte stimmen aber meiner Meinung nach:
Owner: wwwrun
Group: www
Permission: -rw-r--r--
-
also du darfst natürlich nicht den absoluten Pfad in der Form (http://...) angeben, aber hasst du es mal mit dem lokal absoluten (hört sich blöd an - ich meine wie unter Windows z.B. C:\WWW\bilder\chache\image.jpg) ausprobiert - schau dir dazu evtl. mal phpinfo() an, um rauszubekommen wie du den Pfad dann automatisch auslesen kannst)
Außerdem wirst du für die Datei evtl. Schreibrechte benötigen (zumindest für das Verzeichnis), da die TN ja autmatisch per Script erstellt werden
-
Schreib- und Leserechte habe ich im Cache-Verzeichnis (drwxr-xr-x), das Thumbnail wurde ja auch schon erstellt, er versucht jetzt also auf den Cache zuzugreifen, aber meldet mir immer, er konnte die Datei nicht finden, obwohl sie eindeutig exisistert, das Bild hat die Rechte -rw-r--r--. Auch mit absoluter lokaler Pfadangabe funktioniert das nicht
Wenn ich jetzt folgendes aufrufe:
http://www.yxz.net/thumb.php?image=bilder/13.jpg&x=30&y=30&aspectratio=1
... dann sagt er mir, er kann das Bild nicht finden.Wenn ich aber jetzt das Thumb direkt aufrufe:
http://www.xyz.net/bilder/cache/13.jpg
... dann wird das Bild ohne Probleme angezeigt.
-
du musst eben wie schon gesag mal die verschiedenen Möglichkeiten im Script auf dei Datei zu verweisen ausprobieren
-
Hm, also ich habe alle Arten auf die Datei zu verweisen ausprobiert und es klappt immer noch nicht.
Das Orginalbild existiert und das Thumb ist auch korrekt erzeugt worden, sofern ich aber mit if(!file_exists($image)){} die Existenz überprüfen will, wird ausgegeben, das Bild existiert nicht. Egal ob ich das Bild mit /home/www/.../html/bilder/cache/bild.jpg, bilder/cache/bild.jpg oder http://www.xyz.net/bilder/cache/bild.jpg anspreche. Ich weiß echt nicht mehr weiter
-
http://de3.php.net/manual/de/function.file-exists.php
guck mal ob nach is_writeable und is_readable
Anonsten würde ich mal deinen Provider ansprechen, was der gemacht hat!
-
Welcher Pfad wird denn zum erzeugen der TN, verwendet, oder werden die gleich mit dem Upload erzeugt?
-
Zum erzeugen der TN wird der normale lokale Pfad verwendet, also bilder/cache/bald.jpg. Is_writable und is_readable geben beide false zurück. Komisch ist ja wie schon gesagt, dass der Thumbnail-Skript vor 2 Monaten noch ohne Probleme funktioniert hat.
-
Achso, aber jetzt werden die TN auch nicht mehr korrekt erzeugt?!
Hast du wirklich alle denkbaren Möglichkeiten den Pfad anzugeben ausprobiert? Bekommst du denn einen Warnung angezeigt?
-
Nein, die TNs werden nach wie vor korrekt erzeugt, bloß das Skript liest sie ein und gibt so aus, bloß leider schlägt das einlesen ohen Grund fehl, weil die Datei angeblich nicht existiert. Ich habe wirklich alle möglichen Pfadangaben ausprobiert, hilft nichts.
-
Nochmal: welcher Pfad wird denn beim Erzeugen der TN aus dem normalen Bild verwendet? Oder geschieht dies direkt nach dem Upload
-
Wie oben schon geschrieben, das Thumbnail wird erst erzeugt, wenn der entsprechende Skriptaufruf mit dem Bild als Parameter kommt. Bzw, wird zuerst geschaut, ob das entsprechende Bild nicht schon gecacht ist. Der Pfad der zum erzeugen der Thumbs verwendet wird ist in diesem Fall bilder/cache/.
-
Du scheinst nicht ganz zu verstehen, worauf ich hinaus will
Ich meinte, dass zur Erzeugung der TN diese ja auch erst geladen werden müssen. Den Pfad, der dort verwendet wurde kannst du dann ja nachher auch verwenden