2012-03-18 8 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라는 이름으로 이미지를 생성하여 잘 작동,하지만 지금은 두 가지 작업을 수행해야합니다

  1. 생성 된 이미지 고유 한 파일 이름
  2. 가 생성 된 이미지를 다른 폴더가 아닌 루트 디렉토리에 저장해야합니다 {이 다른 파일 이름을 생성해야 할 때마다}가 있어야의 디렉토리 남를 가정 해 봅시다 전자는 "coolpics"로,

이 문제를 해결하도록 도와주세요. 귀하의 답변에 감사드립니다.

+0

는 MD5 ($의 some_data)와 같은 고유 한 이름을 위해 할 수있는 많은 일이있다 또는 당신은뿐만 아니라 microtime을 사용할 수 있습니다

전체 exec 명령은 다음과 같이 보일 것이다. 다른 폴더에 저장하는 것과 관련하여'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("convert $cmd /your/path/".str_replace(".","-",microtime(true)).".gif 2>&1", $array); 
관련 문제