HP-Bauer: Problem mit imagecreate...-Funktionen beim indirekten Aufruf

Hallo,

nachfolgendes Script funktioniert beim Aufruf über den Browser einwandfrei. Wird das Script aber von einer Mail-Weiterleitung (Pipe) aufgerufen, wird das Testbild test.jpg nicht erstellt. Warum? Die Pipe-Weiterleitung ist auf dem Server richtig eingerichtet, da die Datei test.txt durch fopen, fwrite und fclose korrekt erstellt wird.

  
function resizeImage($sourcePath, $destPath, $maxWidth, $maxHeight) {  
   $size = getimagesize($sourcePath);  
   if($size[1]/$size[0] > $maxHeight/$maxWidth) {  
      $newHeight = $maxHeight;  
      $newWidth = ceil($size[0]/$size[1] * $newHeight);  
   } else {  
      $newWidth = $maxWidth;  
      $newHeight = ceil($size[1]/$size[0] * $newWidth);  
   }  
  
   $image = imagecreatefromjpeg($sourcePath) or die("Fehler");  
   $newImage = imagecreatetruecolor($newWidth, $newHeight) or die("Fehler");  
  
   imagecopyresampled($newImage, $image, 0,0,0,0, $newWidth, $newHeight, $size[0], $size[1]) or die("Fehler");  
   imagejpeg($newImage, $destPath) or die("Fehler");  
   imagedestroy($image) or die("Fehler");  
   imagedestroy($newImage) or die("Fehler");  
}  
chdir("/absolute/pfad/angabe/");  
$out = fopen("test.txt","w+");  
fwrite($out, "test");  
fclose($out);  
resizeImage("origtest.jpg", "test.jpg", 300, 300);  

Ich bin für jede Hilfe dankbar.

MfG
HP-Bauer

  1. Hi,

    nachfolgendes Script funktioniert beim Aufruf über den Browser einwandfrei. Wird das Script aber von einer Mail-Weiterleitung (Pipe) aufgerufen, wird das Testbild test.jpg nicht erstellt. Warum?

    Was sagt das Error Log (welches man bei solch einer Testsituation ja sicher eingerichtet hat.)

    Die Pipe-Weiterleitung ist auf dem Server richtig eingerichtet, da die Datei test.txt durch fopen, fwrite und fclose korrekt erstellt wird.

    Probier trotzdem mal, bei den Pfaden bei der Bilderzeugung/-ausgabe absolute Angaben zu machen.

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. Hallo.

      Was sagt das Error Log (welches man bei solch einer Testsituation ja sicher eingerichtet hat.)

      Leider sagt es nichts.

      Probier trotzdem mal, bei den Pfaden bei der Bilderzeugung/-ausgabe absolute Angaben zu machen.

      Die Angaben sind absolut.

      MfG
      HP-Bauer

      1. Hi,

        Probier trotzdem mal, bei den Pfaden bei der Bilderzeugung/-ausgabe absolute Angaben zu machen.

        Die Angaben sind absolut.

        Wenn du "origtest.jpg" und "test.jpg", die du als Parameter beim Aufruf der Funktion angibst und dann auch unverändert bei getimagesize, imagecreatefromjpeg und imagejpeg verwendest, für absolut hältst - dann schlage ich vor, du schlägst die Bedeutung von "absolute Pfadangabe" noch mal nach.

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.
        1. Hallo.

          »» > Probier trotzdem mal, bei den Pfaden bei der Bilderzeugung/-ausgabe absolute Angaben zu machen.
          »»
          »» Die Angaben sind absolut.

          Wenn du "origtest.jpg" und "test.jpg", die du als Parameter beim Aufruf der Funktion angibst und dann auch unverändert bei getimagesize, imagecreatefromjpeg und imagejpeg verwendest, für absolut hältst - dann schlage ich vor, du schlägst die Bedeutung von "absolute Pfadangabe" noch mal nach.

          Die Angaben sind im Beispiel nicht absolut, aber ich habe es auch ohne chdir und mit absoluten Angaben im Funktionsaufruf resizeImage probiert. Ohne Erfolg.

          MfG
          HP-Bauer

  2. Hallo,

    Die Pipe-Weiterleitung ist auf dem Server richtig eingerichtet, da die Datei test.txt durch fopen, fwrite und fclose korrekt erstellt wird.

    function resizeImage($sourcePath, $destPath, $maxWidth, $maxHeight) {

    [...]

    $image = imagecreatefromjpeg($sourcePath) or die("Fehler");
       $newImage = imagecreatetruecolor($newWidth, $newHeight) or die("Fehler");

    imagecopyresampled($newImage, $image, 0,0,0,0, $newWidth, $newHeight, $size[0], $size[1]) or die("Fehler");
       imagejpeg($newImage, $destPath) or die("Fehler");
       imagedestroy($image) or die("Fehler");
       imagedestroy($newImage) or die("Fehler");
    }

      
    warum läßt Deine Funktion das Skript sterben, wenn etwas schief geht?  
    Warum gibst Du stets den Text "Fehler" statt einer spezifischen Fehlermeldung aus?  
    Warum loggst Du nicht den entsprechenden spezifischen Fehler?  
      
    
    > ~~~php
      
    
    > chdir("/absolute/pfad/angabe/");  
    > $out = fopen("test.txt","w+");  
    > fwrite($out, "test");  
    > fclose($out);  
    > resizeImage("origtest.jpg", "test.jpg", 300, 300);  
    > 
    
    

    gibt es Ausgaben im Standardausgabe- oder Standardfehlerkanal?
    Wenn nein, würze Deine Funktion mit Kontrollausgaben.

    Freundliche Grüße

    Vinzenz

  3. Hallo,

    ich habe nun doch noch einen Logeintrag herausgefunden:

    Fatal error:  Call to undefined function:  imagecreatefromjpeg()

    Das verstehe ich nicht, da das Script beim Aufruf über den Browser funktioniert und die GD-Lib installiert ist. Nur beim Aufruf über die Mail-Pipe kommt der Fehler. Warum?

    MfG
    HP-Bauer

  4. Hello,

    Ich bin für jede Hilfe dankbar.

    Welche PHP-Variante wird denn über welchen Weg benutzt?
    Über den Browser könnte dies das Modul sein.
    Und über einen externen Aufruf die CGI- (oder CLI)-Version.

    Da können vollkommen andere Einrichtungen vorliegen.

    Ich empfehle daher, erstmal das berühmte Script "<?php phpinfo(); ?>" zu verwenden, um sich Übersicht zu verschaffen.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hallo.

      Welche PHP-Variante wird denn über welchen Weg benutzt?
      Über den Browser könnte dies das Modul sein.
      Und über einen externen Aufruf die CGI- (oder CLI)-Version.

      Kann ich denn mit einer Mail-Pipe PHP auch als Modul nutzen? Ich leite in der Datei aliases eine Mailadresse auf ein Script mit "|/usr/bin/php /pfad/script.php" um. In der php.ini im Verzeichnis php-cgi ist die GD-Lib aktiviert.

      MfG
      HP-Bauer

      1. Hello,

        Welche PHP-Variante wird denn über welchen Weg benutzt?
        Über den Browser könnte dies das Modul sein.
        Und über einen externen Aufruf die CGI- (oder CLI)-Version.

        Kann ich denn mit einer Mail-Pipe PHP auch als Modul nutzen? Ich leite in der Datei aliases eine Mailadresse auf ein Script mit "|/usr/bin/php /pfad/script.php" um. In der php.ini im Verzeichnis php-cgi ist die GD-Lib aktiviert.

        und hast Du auch das Extension Dir für das Shared Objekt File angeben?
        Liegt die .so-Datei in diesem Verzeichnis?

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Hallo.

          und hast Du auch das Extension Dir für das Shared Objekt File angeben?
          Liegt die .so-Datei in diesem Verzeichnis?

          Beides mal ja. Noch eine Idee? Ohne die GD-Lib bringt mir die Mail-Pipe leider wenig.

          MfG
          HP-Bauer

          1. Hello,

            und hast Du auch das Extension Dir für das Shared Objekt File angeben?
            Liegt die .so-Datei in diesem Verzeichnis?

            Beides mal ja. Noch eine Idee? Ohne die GD-Lib bringt mir die Mail-Pipe leider wenig.

            Welche PHP-Version wird verwendet?
            Welches Host-Betriebssystem?

            Kannst Du die Installation ändern?

            Was sagt:

            <?php   ### info.php ###

            #  phpinfo();

            if (function_exists("gd_info"))
              {
                echo "<pre>";
                print_r(gd_info());
                echo "</pre>";
              }
              else
              {
                echo "Funktion 'gd_info()' existiert nicht<br>";
              }

            echo "<pre>";
              $_functions = get_defined_functions();
              asort($_functions["internal"]);
              asort($_functions["user"]);

            echo htmlspecialchars(print_r($_functions,1));

            echo "<br>\nAnzahl der internen Funktionen: ".count($_functions["internal"])."<br>\n";

            $_classes = get_declared_classes();
              asort($_classes);
              echo htmlspecialchars(print_r($_classes,1));
              echo "<br>\nAnzahl der deklarierten Klassen: ".count($_classes)."<br>\n";

            echo "</pre>";
            ?>

            Es scheint ja nun schon mal die Ursache gefunden zu sein. Nun müssen wir nur noch einen Weg finden, wie Du ein PHP-5-CGI (?) mit einer einkompilierten GD-Lib auf den Host bekommst.

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
            1. Hallo,

              kurze Info: Das Problem ist gelöst, der Provider hat die verschiedenen PHP-Versionen angeglichen. Trotzdem danke.

              MfG
              HP-Bauer