TCZ1: Imagemagick Konvertierung

Hallo :-)

Ich verwende folgenden Code zur Konvertierung einer Bilddatei:

  
$thumb = "/pfad/html/bilder/thumb1.jpg";  
exec( "convert $thumb -blur 4 /pfad/html/bilder/blur_thumb1.jpg");  

Das ist natürlich nicht optimal.

Das Outputfile sollte wie $thumb lauten, nur mit vorangestelltem "blur_".
Ich hab nichts dazu gefunden, wäre schön, wenn mir jemand weiterhelfen könnte.

Grüße und Dank, Tom

  1. Hi!

    Das Outputfile sollte wie $thumb lauten, nur mit vorangestelltem "blur_".

    Dann willst du wohl den Inhalt von $thumb auseinandernehmen und um blur_ ergänzt wieder zusammensetzen. Dazu eigenen sich Stringfunktionen. Für Dateinamen gibt es auch spezielle Funktionen: basename(), dirname() und pathinfo().

    Lo!

  2. Hallo,

    $thumb = "/pfad/html/bilder/thumb1.jpg";
    exec( "convert $thumb -blur 4 /pfad/html/bilder/blur_thumb1.jpg");

      
    
    > Das Outputfile sollte wie $thumb lauten, nur mit vorangestelltem "blur\_".  
      
    mittels [basename()](http://de.php.net/manual/de/function.basename.php) und [dirname()](http://de.php.net/manual/de/function.dirname.php) ermittelst Du den Verzeichnisanteil und den Dateinamen aus Deinem Pfad zum Thumbnail und verkettest Verzeichnisanteil, [Verzeichnistrenner](http://de.php.net/manual/de/dir.constants.php), Präfix und regulären Dateinamen zum Zielpfad.  
      
      
    Freundliche Grüße  
      
    Vinzenz
    
  3. Moin!

    Ich verwende folgenden Code zur Konvertierung einer Bilddatei:

    $thumb = "/pfad/html/bilder/thumb1.jpg";
    exec( "convert $thumb -blur 4 /pfad/html/bilder/blur_thumb1.jpg");

      
    Au weia. Da hast du einen wirklich üblen Kontextwechsel nicht beachtet, und das kann durchaus üble Konsequenzen haben, gerade bei exec().  
      
    Du wechselst hier vom Kontext "simpler Text als Dateiname" in den Kontext "Kommandozeilenargument" - und das ist deshalb fatal, weil das Kommandozeilenargument in den dir bekannten Fällen keinerlei Veränderung am Dateinamen erfordert. Das sind aber alles die guten Fälle mit freundlich gestalteten Dateinamen.  
      
    Was ist mit Fällen, in denen unfreundliche Dateinamen vorkommen?  
      
    Nutze immer [escapeshellarg()](http://de3.php.net/escapeshellarg) und [escapeshellcmd()](http://de3.php.net/escapeshellcmd), wenn du irgendwelche Variablen in die Kommandozeile einfügen willst.  
      
    Ansonsten kann es dir passieren, dass man dir zusätzliche Kommandos in die Kommandozeile einfügt, die du aber absolut nicht ausgeführt sehen willst.  
      
     - Sven Rautenberg
    
    1. Hi Sven.

      Ansonsten kann es dir passieren, dass man dir zusätzliche Kommandos in die Kommandozeile einfügt, die du aber absolut nicht ausgeführt sehen willst.

      Wer ist denn hier "man"?

      Viele Gruesse,
      der Bademeister

      1. Moin!

        Ansonsten kann es dir passieren, dass man dir zusätzliche Kommandos in die Kommandozeile einfügt, die du aber absolut nicht ausgeführt sehen willst.

        Wer ist denn hier "man"?

        Der Böse Unbekannte.

        Ich gehe mal davon aus, dass der gelieferte Code nur zu Demozwecken genutzt wurde, und in Wahrheit die Variable aus dynamischen Quellen gespeist wird. Im Zweifel ist das aber auch irrelevant, denn auch blöde Sonderzeichen, die man unwissend der Variablen absichtlich zuweist, können das positive Gesamtergebnis unschön negativ beeinflussen.

        Und schon allein aus Sicht einer sicherheitsorientierten Denkweise sollte man sich angewöhnen, sämtliche Variablen passend zu escapen, unabhängig von der Tatsache, dass sie eventuell im konkreten Fall garantiert nur sichere Zeichen enthalten. Denn wenn man immer Escaping macht, fällt es leichter ins Auge, wenn Escaping mal fehlt. Denn wenn Escaping fehlt, ist das das Potential für Unsicherheiten.

        - Sven Rautenberg

        1. Der Böse Unbekannte.

          Ah ja, der. :-)

          Inhaltlich halte ich Deine Anmerkung im ersten Posting natuerlich fuer sehr wichtig und wertvoll. Nur, weil mir kuerzlich oefters aufgefallen ist, dass viele Leute so eine "Keine Ahnung, ob mein Skript sicher ist (und auch nicht, was ich mit 'sicher' eigentlich genau meine), also hau ich nochmal ein paar Escape-Funktionen rein an Stellen, die so aussehen, als koennten sie es vertragen"-Herangehensweise haben, schien mir das Ganze (insbes. der letzte Nachsatz) diese evtl. noch ein bisschen zu verstaerken, denn der Code, der da konkret steht, ist nun mal nicht unsicher. Daher wollte ich mal etwas genauer fragen.

          Und schon allein aus Sicht einer sicherheitsorientierten Denkweise sollte man sich angewöhnen, sämtliche Variablen passend zu escapen, unabhängig von der Tatsache, dass sie eventuell im konkreten Fall garantiert nur sichere Zeichen enthalten. Denn wenn man immer Escaping macht, fällt es leichter ins Auge, wenn Escaping mal fehlt. Denn wenn Escaping fehlt, ist das das Potential für Unsicherheiten.

          Hier natuerlich vollste Zustimmung.

          Viele Gruesse,
          der Bademeister