2010-12-26 27 views
0

画像をサイズ変更してアップロードする機能を作成しましたが、1つの画像に対してのみ機能します。私は、関数を3回呼び出した場合ので、私は 画像アップロードの問題

function uploadImage($name,$width,$height,$size,$path='content/user_avatars/') 
{ 
    //=================================================== 
    //Handle image upload 
    $upload_error=0; 
    //Picture 
    $img = $_FILES[$name]['name']; 
    if($img) 
    { 
     $file = stripslashes($_FILES[$name]['name']); 
     $ext = strtolower(getExt($file)); 

     if($ext!='jpg' && $ext!='jpeg' && $ext!='png' && $ext!='gif') 
     { 
      $error_msg = "Unknown extension"; 
      $upload_error = 1; 
      return array($upload_error,$error_msg); 
     } 

     if(filesize($_FILES[$name]['tmp_name'])>$size*1024) 
     { 
      $error_msg = "Max file size of ".($size*1024)."kb exceeded"; 
      $upload_error = 2; 
      return array($upload_error,$error_msg); 
     } 

     $newFile = time().'.'.$ext; 

     resizeImg($_FILES[$name]['tmp_name'],$ext,$width,$height); 
     $store = copy($_FILES[$name]['tmp_name'],$path.$newFile); 
     if(!$store) 
     { 
      $error_msg = "Uploading failed"; 
      $upload_error = 3; 
      return array($upload_error,$error_msg); 
     } 
     else 
     { 
      return array($upload_error,$newFile); 
     } 
    } 
} 

//========================================================================================= 

//Helper Functions 
function getExt($str) 
{ 
    $i = strpos($str,"."); 
    if(!$i) 
    { 
     return ""; 
    } 
    $l = strlen($str)-$i; 
    $ext = substr($str,$i+1,$l); 
    return $ext; 
} 

function resizeImg($file,$ext,$width,$height) 
{ 
    list($aw,$ah) = getimagesize($file); 
    $scaleX = $aw/$width; 
    $scaleY = $ah/$height; 

    if($scaleX>$scaleY) 
    { 
     $nw = round($aw*(1/$scaleX)); 
     $nh = round($ah*(1/$scaleX)); 
    } 
    else 
    { 
     $nw = round($aw*(1/$scaleY)); 
     $nh = round($ah*(1/$scaleY)); 
    } 


    $new_image = imagecreatetruecolor($nw,$nh); 
    imagefill($new_image,0,0,imagecolorallocatealpha($new_image,255,255,255,127)); 
    if($ext=='jpg'||$ext=='jpeg') 
    { 
     $src_image = imagecreatefromjpeg($file); 
    } 
    else if($ext=='gif') 
    { 
     $src_image = imagecreatefromgif($file); 
    } 
    else if($ext=='png') 
    { 
     $src_image = imagecreatefrompng($file); 
    } 
    imagecopyresampled($new_image,$src_image,0,0,0,0,$nw,$nh,$aw,$ah); 

    if($ext=='jpg'||$ext=='jpeg') 
    { 
     imagejpeg($new_image,$file,100); 
    } 
    else if($ext=='gif') 
    { 
     imagegif($new_image,$file); 
    } 
    else if($ext=='png') 
    { 
     imagepng($new_image,$file,9); 
    } 

    imagedestroy($src_image); 
    imagedestroy($new_image); 
} 

は、私は2つのアップロードフィールドを持つフォームを持っている.....最後の画像の3つのコピーで終わる、「face_pic」と「body_pic」、およびIこれらの2つをサーバーにアップロードし、保存する前にサイズを変更します。何か案は?

答えて

0
md5(microtime()) 

このように名前を変更してみてください。

またはこのような何かをしようと...

function slikeAvatar($slika,$id = 0){ 
    copy($slika, "avatari/{$id}l.jpg"); 
    $gfx = new Thumbnail($slika, 200); 
    $gfx->save("avatari/{$id}.jpg"); 
    unset($gfx); 
    $gfx = new Thumbnail($slika, 75); 
    $gfx->save("avatari/{$id}s.jpg"); 
    unset($gfx); 
    slikeCrop("avatari/{$id}s.jpg","avatari/{$id}s.jpg"); 
} 

slike =画像

1

現在の時刻を使用して、結果のファイル名を判別します。この関数は非常に速く実行され、time()は両方の画像で同じ結果が得られます。

ファイルの結果の名前を明確にするために、他の手段を使用してください。最良の選択は、結果の名前をパラメータとして渡すことです。そうすれば、環境によってファイルの名前が決まります。候補は、メタ情報の主キー(データベースに格納されている場合)、元のファイル名、ユニバーサルユニークな識別子です。

いずれの場合も、結果の名前がプラットフォーム上の正当なファイル名であり、誤ってファイルを上書きしていないかどうかを確認してください。

move_uploaded_fileを使用して、ファイルを一時的な場所から移動先に移動することも検討してください。その関数はセキュリティチェックを行います。

+0

はので、どのように私は状況を解決するのですか?ファイルが異なる名前で保存されているため、異なるタイムスタンプが選択されるため、問題はないと思います。 – Bluemagica

+0

いくつかの提案を追加しました。 – Oswald