Thomas: Bilder verkleinern

Hallo zusammen,

Ich habe auf meiner Homepage eine Galerie. Damit Die Bilder nicht unnötig Speicherplatz verbrauchen, hab ich ein Script gebaut, dass alle Bilder automatisch verkleinert.

  
<?php  
$ordner1 = "galerie";  
$handle1 = opendir($ordner1);  
while ($file1 = readdir ($handle1)) {  
    if($file1 != "." && $file1 != "..") {  
            $compl1 = $ordner1."/".$file1;  
  
$path = "$compl1/control.control";  
if(!file_exists($path))  
{  
  
$ordner = "$compl1/";  
$handle = opendir($ordner);  
while ($file = readdir ($handle)) {  
    if($file != "." && $file != "..") {  
            $compl = $ordner."/".$file;  
$bild="$compl1/".$file;  
$size=getimagesize($bild);  
             $breite=$size[0];  
             $hoehe=$size[1];  
                 $neueHoehe=500;  
                 $neueBreite=intval($breite*($neueHoehe/$hoehe));  
                 $altesBild=ImageCreateFromJPEG($bild);  
                 $neuesBild=imagecreatetruecolor($neueBreite,$neueHoehe);  
                 imagecopyresampled($neuesBild,$altesBild,0,0,0,0,$neueBreite,$neueHoehe,$breite,$hoehe);  
     ImageJPEG($neuesBild,"$compl1/".$file);  
    }  
}  
  
$fp = "$compl1/control.control";  
$inhalt = "Diese Datei dient zur Kontrolle ob die Bilder verkleinert wurden";  
$f = fopen($fp,"w+");  
fwrite($f,$inhalt);  
fclose($f);  
}  
  
  
}  
}  
?>  

Leider geschieht beim ausführen einfach nichts.

Als ich das Script auf dem lokalen Server getestet hatte funktionierte alles Prima. Ich denke es liegt an igrendwelchen servereinstellungen. HAt jemand ne Idee wie man das Problem lösen könnte.

Lg

  1. Hallo

    Als ich das Script auf dem lokalen Server getestet hatte funktionierte alles Prima. Ich denke es liegt an igrendwelchen servereinstellungen. HAt jemand ne Idee wie man das Problem lösen könnte.

    Kommentare einfügen.

    error_reporting auf E_ALL setzen.
    Debugausgaben einfügen.
    Rückgabewerte prüfen.

    Ich verstehe nicht, was Du da machst.
    Vergiß bitte nicht, dass wir keine Informationen über Dein Dateisystem haben.

    Freundliche Grüße

    Vinzenz

    1. Hallo

      error_reporting auf E_ALL setzen.

      Gibt immer noch keine Fehlermeldung aus. Es lief ja auch schon auf dem lokalen Server.

      Vergiß bitte nicht, dass wir keine Informationen über Dein Dateisystem haben.

      Der lokale Server ist Windows XP mit Xampp, der richtige Server ist glaube ich Linux.

      Muss für diese Funktion die GD libary installiert sein..?

      Lg

      1. Grüße,

        Muss für diese Funktion die GD libary installiert sein..?

        natürlich - aber du bekämest "unbekante funktion" wenn die nicht installiert wäre , also kanns daran nciht liegen.. adresse der bilder? linux handhabts ein wenig sensibler als windows.

        MFG
        bleicher

        --
        __________________________-
        Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
        Lieber bereuen gesündigt zu haben, als nicht sündigen und es später trotzdem bereuen.
        Boccaccio
        1. Hello,

          Muss für diese Funktion die GD libary installiert sein..?
          natürlich - aber du bekämest "unbekante funktion" wenn die nicht installiert wäre , also kanns daran nciht liegen.. adresse der bilder? linux handhabts ein wenig sensibler als windows.

          Wenn ich mir die Jongliererei mit den Pfaden anschaue, steckt der Fehler sicherlich dort.
          Eine von den While-Schleifen (oder vielleicht sogar beide, wenn sie dürften *g*) werden Thomas da 'nen Vogel zeigen...

          Zumal die Laufbedingungen mit

          while ($file = readdir ($handle))
             {

          }

          auch falsch sind, es sei denn, man will, dass die Schliefe bei einem File namens '0' aufhört zu laufen.

          Harzliche Grüße vom Berg
          http://bergpost.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

          1. Hallo zusammen,

            Habe das Problem gefunde.

            Die Bilder können nicht einfach so erstzt werden. Wenn sie anders genannt werden funktionierts.

            Weiss jemand wie das mit dem ersetzen gehen könnte?

            Lg

            1. Hello,

              Habe das Problem gefunde.
              Die Bilder können nicht einfach so erstzt werden. Wenn sie anders genannt werden funktionierts.
              Weiss jemand wie das mit dem ersetzen gehen könnte?

              Das wird schon gehen, dass Du eine Datei überschreibst, denn Du erzeugst ja mit imageCreateFromJpeg() ein ausgepacktes Bild (unkomprimiert) im Speicher. Aus diesem machst Du im vorbereiteten Speicherbereich eine verkleinerte Kopie. Mit dieser kannst Du dann das urprüngliche File überschreiben. dazu muss dein PHP-Prozess aber Schreibrechte auf das File haben.

              Sollte sich imageJpeg() weigern, was ich nicht glaube, würde immer noch unlink() zur Verfügung stehen. Das würde aber Schreibrechte im Verzeichnis erfordern.

              Harzliche Grüße vom Berg
              http://bergpost.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
              Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

            2. Hoppla, da habe ich mich wohl getoschen.

              Das Script funktioniert beim ersten Durchlauf, das heisst ein Bild wird verkleinert. Ansonsten funktionierts nicht... :(

              Lg

              1. Hallo

                Das Script funktioniert beim ersten Durchlauf, das heisst ein Bild wird verkleinert. Ansonsten funktionierts nicht... :(

                Baue endlich Debug-Ausgaben ein.
                Verzeichnis- und Dateinamen wären ein Ansatz.
                Dann solltest Du zumindest sehen, wo das Skript sich "verläuft".

                Freundliche Grüße

                Vinzenz

                1. Hallo

                  Baue endlich Debug-Ausgaben ein.

                  Meinst du damit dass ich mir z.B. Die Pfade ausgeben lasse.?

                  Lg

                  1. Hallo Thomas,

                    Baue endlich Debug-Ausgaben ein.
                    Meinst du damit dass ich mir z.B. Die Pfade ausgeben lasse.?

                    Ja.
                    Grenze den Fehler ein.

                    Freundliche Grüße

                    Vinzenz

            3. Hallo Thomas,

              Die Bilder können nicht einfach so erstzt werden. Wenn sie anders genannt werden funktionierts.

              und _das_ erzeugt _keine_ Fehlermeldung?

              Freundliche Grüße

              Vinzenz

        2. Ahoi,

          Also, dieses Script liegt im Hauptornder des Servers. In diesem Ordner liegt ebenfalls der Ornder galerie.

          Soblad dass Script ausgeführt wird, werden alle Ordner im Verzeichniss galerie eingelesen.

          Die Bilder in diesen Ordnern werden alle wieder ausgelesen und dann verkleinert und am alten Ort abgespeichert.

          Ich hoffe so ist es etwas klarer.

          Lg

          1. Hello,

            Die Bilder in diesen Ordnern werden alle wieder ausgelesen und dann verkleinert und am alten Ort abgespeichert.

            Wenn Dein Script dann endlich mal anfängt, seine Arbeit zu tun, wird es aber nicht weit kommen.
            Du hast vergessen, den Speicher für die ausgepackten Bilder wieder freizugeben.

            Wenn Deine Bilder mit imageJPEG() weggeschrieben sind, solltest Du imagedestroy() bemühen.

            http://de3.php.net/manual/en/function.imagedestroy.php

            Warum benutzt Du nicht glob() für das Einlesen der Verzeichnisstruktur? Das ist wesentlich bequemer.

            http://de3.php.net/manual/en/function.glob.php

            Harzliche Grüße vom Berg
            http://bergpost.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

      2. Hallo

        error_reporting auf E_ALL setzen.

        Gibt immer noch keine Fehlermeldung aus. Es lief ja auch schon auf dem lokalen Server.

        Vergiß bitte nicht, dass wir keine Informationen über Dein Dateisystem haben.
        Der lokale Server ist Windows XP mit Xampp, der richtige Server ist glaube ich Linux.

        Was hat das damit zu tun? Ich weiß immer noch nicht, wie Deine Verzeichnisstruktur aufgebaut ist. Du gehst in Deinem Skript von vielen Dingen aus, die unbekannt sind. Du verläßt Dich darauf, dass das Ergebnis so ist, wie
        Du es Dir vorstellst. Du prüfst keine Rückgabewerte auf potentielle Fehler. Du
        machst keine Debug-Ausgaben. Wie willst Du Fehler finden?

        Was diese Vorstellung ist, das kann ich nicht wissen.
        Ein solches Skript ohne jegliche Kommentarzeile ist eine Zumutung für jeden
        potentiellen Helfer. Es ist in einem halben Jahr eine Zumutung für Dich.

        Alle Voraussetzungen, die Dir bekannt sind, die aber nicht selbstverständlich
        sind, gehören in entsprechende Kommentare.

        Freundliche Grüße

        Vinzenz

      3. echo $begrüßung;

        error_reporting auf E_ALL setzen.
        Gibt immer noch keine Fehlermeldung aus. Es lief ja auch schon auf dem lokalen Server.

        Vergewissere dich bitte noch, z.B. mit phpinfo(), ob display_errors eingeschaltet ist. Im laufenden Betrieb sollte es zwar ausgeschaltet sein, was der Provider vielleicht auch so voreingestellt hat, aber zur Fehlerausgabe wird es eingeschaltet benötigt.

        Wenn du es im Script mit ini_set() einschaltest, kann das allerdings schon zu spät sein, denn bei einem Parser-Error kommt es gar nicht erst zur Scriptausführung. Besser ist es, das je nach lokalen Gegebenheiten in der .htaccess oder einer lokalen php.ini einzuschalten. Frage ggf. deinen Provider, welche Möglichkeiten es gibt, PHP-Konfigurationswerte bereits im Verzeichnis zu ändern.

        echo "$verabschiedung $name";