Problem mit imagecreate...-Funktionen beim indirekten Aufruf
HP-Bauer
- php
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
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
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
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
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
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
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
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
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
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
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
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
Hallo,
kurze Info: Das Problem ist gelöst, der Provider hat die verschiedenen PHP-Versionen angeglichen. Trotzdem danke.
MfG
HP-Bauer