2012-03-18 6 views
0

を作成し、以下のコードを確認してください:コードの上にImageMagickのは、私はImageMagickのを使用して画像を生成しようとしている一意のファイル名

<? 
$label=$_POST["label"]; 
$image =$_POST["image"]; 
$cmd = " -background transparent label:\"$label\" -stroke red -strokewidth 0 ". 
" \(-clone 0 -tile \"" . $image . "[0]\" -stroke red -strokewidth 0 -gravity center -annotate +0+0 \"$label\" \) ". 
" \(-clone 0 -tile \"" . $image . "[1]\" -stroke red -strokewidth 0 -gravity center -annotate +0+0 \"$label\" \) ". 
" \(-clone 0 -tile \"" . $image . "[2]\" -stroke red -strokewidth 0 -gravity center -annotate +0+0 \"$label\" \) ". 
" \(-clone 0 -tile \"" . $image . "[3]\" -stroke red -strokewidth 0 -gravity center -annotate +0+0 \"$label\" \) ". 


" -delete 0 -set delay 20 -loop 0 -trim +repage -layers Optimize "; 

$array=array(); 
echo "<pre>"; 
exec("convert $cmd masked.gif 2>&1", $array); 
echo "<br>".print_r($array)."<br>"; 
echo "</pre>"; 
echo "<img src='masked.gif'>"; 
?> 

masked.gifという名前の画像を生成することで正常に動作しますが、私は今、2つのことを行う必要があります。画像は、固有のファイル名

  • 生成された画像を別のフォルダではないのルートディレクトリに保存されなければならない{それは別のファイル名を生成する必要がありますたび}、のディレクトリナムを言わせを持つべき生成

    1. "coolpics"としてe、

    この問題を解決するのを手伝ってください。あなたの応答は高く評価されます。

  • +0

    あなたは、MD5($ SOME_DATA)のようなユニークな名前のために何ができるか、あなたが同様のmicrotimeを使用することができ、多くの事があります。他のフォルダに保存する場合は、あなたが 'exec'で望むパスを与えるようにしましたか? – Melsi

    答えて

    1
    1. 固有のファイル名については、uniqidの機能を確認してください。
    2. ディレクトリを保存するため、ファイル名だけでそれを連結し、何かのように:非常に深刻なセキュリティはに失敗し、システムコマンドに直接POST値を渡している
     
    // your command here 
    
    $directory = "/data/images/coolpics/" 
    $name = uniqid(); 
    exec(escapeshellcmd("convert $cmd $directory$name 2>&1"), $array); 
    

    注、これが可能。 escapeshellcmdを使用して、システムが安全であることを確認してください。

    0

    一意のファイル名を取得する簡単な解決策は、タイムスタンプ(microtime()doc reference)など)を使用することです。イメージを別のフォルダに保存するには、パスをexecパラメータに追加します。

    全体のexecコマンドは次のようになります。

    exec("convert $cmd /your/path/".str_replace(".","-",microtime(true)).".gif 2>&1", $array); 
    
    関連する問題