[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/.


Anmelden zum Antworten