2011-07-29 25 views
1

複数のコマンドを1つのexecコマンドで実行できますか?私は、SVGファイルから一部の画像を取得する必要があり、これ変種が遅すぎる:複数のinkscapeコマンドを1行で実行

exec('inkscape file.svg --export-id=g123 --export-png=img1.png'); 
exec('inkscape file.svg --export-id=g124 --export-png=img2.png'); 
exec('inkscape file.svg --export-id=g125 --export-png=img3.png'); 

は、だから私は1行ですべてを行う必要があります。私はすでにこれを試しました:

exec('inkscape file.svg --export-id=g125 --export-png=img3.png inkscape file.svg --export-id=g123 --export-png=img1.png'); 

しかし、これは最後の画像だけを抽出します。

答えて

1

exec()はおそらく遅くありません。 Server/inkscapeが遅いです。

+0

のようにそれを使用します( ';'を使用して)1行にすると、それは速くなりません。 Inkscapeはボトルネックです(ジェネシスはすでに述べています)。 @ジェネシスなぜシェルに変更する必要がありますか? Inkscapeはボトルネックなので、PHPをシェルに変更することは本当に重要ではありませんか? – elslooo

+0

@TimvanElsloo:最後の文章を削除:) – genesis

2

exec()それ自体は遅くはありません。しかし、それぞれの呼び出しで、まずInkscapeを起動し、操作を実行してもう一度閉じます。つまり、何がそんなに長くかかります。

残念ながら、Inkscapeにはバッチモードはありません。あなたはGimpを使うことができます。同じ操作をバッチで実行できます。

1

Inkscapeをシェルモードで実行し、そのコマンドにstdinコマンドを書き込むことで通信できます。あなたがPHPでそれを実装したくない場合は、例えば、それあなたのための ないシンプルなシェルラッパーを書くことができます:その後、

#!/bin/bash 
SVG="$1" 
shift 
(
while [ "$1" != "" ] ; do 
    echo "\"--file=$SVG\" \"--export-id=$1\" \"--export-png=$2\"" 
    shift 2 
done 
echo "quit" 
) | \ 
    /path/to/inkscape --shell 2>/dev/null 

そして、あなたが結合する場合でも、この

exec("/path/to/wrapper file.svg g123 img1.png g124 img2.png g125 img3.png"); 
関連する問題