Imagemagick -convert Problem
Drathy
- grafik
0 Sven Rautenberg0 Drathy
Hallo zusammen!
Muss mich leider schon wieder mit einem ImageMagick Problem an das Forum wenden, um Hilfe zu erhalten, da ich grad am verzweifeln bin... Ich hatte auch bereits in einem anderen Forum um Hilfe gebeten, doch leider konnte mir dort (bislang) nicht geholfen werden, daher möchte ich mein Problem hier noch einmal ganz kurz beschreiben:
Ich habe eine if-Schleife, in der aus Bildern per Imagemagick Vorschaubilder erfolgreich generiert werden. Der else-Teil soll dann ausgeführt werden, wenn ein nicht unterstütztes Dateiformat angesprochen wird, was soweit auch klappt. In der else-Schleife möchte ich nun, dass dann ein jpg mit einem Text per ImageMagick generiert wird. Ich habe dazu Beispiel 3 auf dieser Seite als Vorlage verwendet:
[url]http://www.cit.gu.edu.au/~anthony/graphics/imagick6/text/index.html[/url]
Mein Code bzw. meine Anweisung sieht wie folgt aus:
$verkleinern = "/usr/bin/convert -background white -fill black -font Arial -size $groesse -gravity center label:'Keine Vorschau\n verfügbar...' '$zieldatei' ";
exec($verkleinern);
Ich kann definitiv sagen, dass die Variablen und auch der Pfad zum convert ok sind, da sie im if-Teil erfolgreich verwendet werden...
Ich habe schon einiges ausprobiert, jedoch ohne Erfolg! Hat jemand ne Idee, wo das Problem liegen könnte? TrueType-Fontsupport ist übrigens aktiviert, ebenso wie Ghostscript...
Achja: Mein Problem ist, dass das Bild schlichtweg nicht generiert wird - keine Ahnung, wieso...
Gruß,
Drathy
Moin!
Achja: Mein Problem ist, dass das Bild schlichtweg nicht generiert wird - keine Ahnung, wieso...
Gibt die Shell Fehlermeldungen zurück?
Escapst du alle Zeichen korrekt für die Shell? Insbesondere der Zeilenumbruch ist böse. Nutze escapeshellarg()! Ansonsten kann man dir unter Umständen beliebige Kommandos und Schadprogramme einschleusen.
- Sven Rautenberg
Hi!
Gibt die Shell Fehlermeldungen zurück?
Öhm...nö...nicht das ich wüsste...muss aber auch sagen, dass ich grad nicht weiß, wo ich eine Meldung sehen sollte...
Ich erkenne den Fehler nur daran, dass die Datei einfach nicht da ist, wenn in der nächsten Zeile getimagesize() aufgerufen wird...
Escapst du alle Zeichen korrekt für die Shell? Insbesondere der Zeilenumbruch ist böse. Nutze escapeshellarg()! Ansonsten kann man dir unter Umständen beliebige Kommandos und Schadprogramme einschleusen.
Ich denke schon, zumindest mache ich es so wie im angegebenen Beispiel bzw. so, wie ich es beim anderen (funktionierenden) Kommando auch mache. Der Zeilenumbruch ist übrigens in meinem php-Code nicht vorhanden - der ist hier anzeigebedingt...
Werde mich mit escapeshellarg() vertraut machen!
Gruß,
Drathy
Moin!
Gibt die Shell Fehlermeldungen zurück?
Öhm...nö...nicht das ich wüsste...muss aber auch sagen, dass ich grad nicht weiß, wo ich eine Meldung sehen sollte...
Lies mal zur Abwechslung eine Doku zu den Befehlen, die du benutzt: exec()
Ich erkenne den Fehler nur daran, dass die Datei einfach nicht da ist, wenn in der nächsten Zeile getimagesize() aufgerufen wird...
Reagierst du auf Erfolg oder Mißerfolg des exec-Kommandos? Nein!
Escapst du alle Zeichen korrekt für die Shell? Insbesondere der Zeilenumbruch ist böse. Nutze escapeshellarg()! Ansonsten kann man dir unter Umständen beliebige Kommandos und Schadprogramme einschleusen.
Ich denke schon, zumindest mache ich es so wie im angegebenen Beispiel bzw. so, wie ich es beim anderen (funktionierenden) Kommando auch mache.
Dass etwas funktioniert, bedeutet nicht, dass es nicht angreifbar ist. Das phpBB funktioniert auch - und doch war nahezu jede Version angreifbar und wurde (teilweise sogar durch Bots, die bei Google nach den Boards gesucht haben) auch heftig angegriffen.
Es geht nicht darum, was der Code normalerweise macht, sondern was er in Extremfällen außerdem noch machen KÖNNTE!
Der Zeilenumbruch ist übrigens in meinem php-Code nicht vorhanden - der ist hier anzeigebedingt...
Ich meine das \n in deinem Ausgabetext. Das wird schon im PHP-String zum Steuerzeichen "Linefeed". Und die Shell reagiert auf solche Zeichen allergisch.
Werde mich mit escapeshellarg() vertraut machen!
Eine gute Idee.
- Sven Rautenberg
Hi!
Lies mal zur Abwechslung eine Doku zu den Befehlen, die du benutzt: exec()
Auch wenn Du es nicht glauben magst, aber ich hatte dort schon reingeschaut...wie es scheint, allerdings nicht mit der nötigen Konzentration, oder ich bin einfach zu blind/blöd... ;-)
Reagierst du auf Erfolg oder Mißerfolg des exec-Kommandos? Nein!
Hab ich nun gemacht und wie erwartet wird das Kommando nicht ausgeführt, was mir meine if(!exec())die("geht nicht")-Ausgabe bewiesen hat...
Das lässt mich darauf schließen, dass irgendetwas an der Syntax des Kommandos nicht in Ordnung ist, da ich dieses Problem auch bei meinem Kommando weiter oben im Code hatte...doch leider konnte ich hier bislang keinen Fehler finden... Hatte gehofft, dass Euren geübteren Augen da sofort was auffällt...
Dass etwas funktioniert, bedeutet nicht, dass es nicht angreifbar ist. Das phpBB funktioniert auch - und doch war nahezu jede Version angreifbar und wurde (teilweise sogar durch Bots, die bei Google nach den Boards gesucht haben) auch heftig angegriffen.
Da hast Du natürlich vollkommen Recht!!! Selbst schon an eigenem Leibe erfahren... :( ;-)
Ich meine das \n in deinem Ausgabetext. Das wird schon im PHP-String zum Steuerzeichen "Linefeed". Und die Shell reagiert auf solche Zeichen allergisch.
Da hatte ich Dich mißverstanden. Die Idee hatte ich zwischenzeitlich aber auch schon, und ein eben wiederholter Test ohne Umbruch behob das Problem leider auch nicht... :(
Danke schonmal für Deine geopferte Zeit!
Gruß,
Drathy
Moin!
Reagierst du auf Erfolg oder Mißerfolg des exec-Kommandos? Nein!
Hab ich nun gemacht und wie erwartet wird das Kommando nicht ausgeführt, was mir meine if(!exec())die("geht nicht")-Ausgabe bewiesen hat...
Der Rückgabewert von exec() ist nicht true/false, sondern ein String, in dem die letzte Zeile der Textausgabe des aufgerufenen Kommandos steht.
Und was sagt uns das jetzt?
Zumindest, dass man nicht einfach mit if abfragen kann, ob exec() erfolgreich war.
Irgendwas an deinem Kommando ist aber faul. Ich würde ja sagen: Besorg dir eine Kommandozeile und gib das Kommando mal per Hand ein, um zu gucken, was dann passiert.
Und wenn das nicht geht, mußt du eben den eventuellen Fehlertext (und nicht nur dessen letzte Zeile) des Kommandoaufrufs wissen. passthru() macht sowas.
- Sven Rautenberg
Hi!
Der Rückgabewert von exec() ist nicht true/false, sondern ein String, in dem die letzte Zeile der Textausgabe des aufgerufenen Kommandos steht.
Und was sagt uns das jetzt?
Das ich zu blöd zum lesen / verstehen der Doku bin? *schäm*
Irgendwas an deinem Kommando ist aber faul. Ich würde ja sagen: Besorg dir eine Kommandozeile und gib das Kommando mal per Hand ein, um zu gucken, was dann passiert.
Ich muss mal schauen, ob es da ne Möglichkeit gibt, ne IM-Konsole auf nem WinXP-System zu installieren...bislang hab ich das nur von MAC-Systemen gehört...
Und wenn das nicht geht, mußt du eben den eventuellen Fehlertext (und nicht nur dessen letzte Zeile) des Kommandoaufrufs wissen. passthru() macht sowas.
Ok, werde ansonsten mal versuchen, mir den ausgeben zu lassen...
Gruß & danke,
Drathy