0

アップロード後に台無しにされた画像を検出するにはどうすればよいですか?

私はこのようなコードを使用しています:

$imageSize = getimagesize($tmp_name);
if(!$imageSize ||  !in_array($imageSize['mime'], $allowMimeType)){
    $this->error = 'Bad Image';
    @unlink($tmp_name);
    return false;
}
$tn = imagecreatetruecolor(80, 80);
switch ($imageSize['mime']){
    case 'image/jpeg':
        $userphoto = imagecreatefromjpeg($tmp_name);// Error 1
    break;
    case 'image/png':
        $userphoto = imagecreatefrompng($tmp_name);// Error 1
    break;
    case 'image/gif':
        $userphoto = imagecreatefromgif($tmp_name);// Error 1
    break;
    case 'image/bmp':
        $userphoto = imagecreatefromwbmp($tmp_name);// Error 1
    break;
    default:
        $this->error = 'unknown image';
        @unlink($tmp_name);
        return false;
    break;
}
imagecopyresampled($tn, $userphoto, 0, 0, 0, 0, 80, 80, $width, $height);// Error 2
imagejpeg($tn,'images/userphoto/'.$this->username.'.jpg',100);
chmod('images/userphoto/'.$this->username.'.jpg', 0777);
@unlink($tmp_name);
USERPROFILE::updatePhotoByUsersId($this->username.'.jpg', $this->users_id);

しかし、いつか私は2つのエラータンデムを与えます、

  1. コメントのある行で// Error 1

imagecreatefromwbmp()[href ='function.imagecreatefromwbmp'> function.imagecreatefromwbmp]:>'images / userphoto/4ff7db9800871.bmp'は有効なWBMPファイルではありません

imagecreatefromgif()[href ='function.imagecreatefromgif'> function.imagecreatefromgif]:>'images / usersphoto/4fe70bb390758'は有効なGIFファイルではありません

  1. コメントの行で// Error 2

    imagecopyresampled():指定された引数は有効な画像リソースではありません

アップロード中にファイルが破損したために発生したと思います。私が正しい場合、どうすればこの問題を解決できますか?そうでない場合、その理由は何ですか?

4

1 に答える 1

2

さらに処理を行う前に、getimagesize()の戻り値を確認する必要があります。

getimagesize()を返す場合は、FALSE失敗し、ファイルに問題があることを意味するため、終了する必要があります。画像がこのチェックに合格すると、処理を続行できます。

を取得する理由についてはsupplied argument is not a valid Image resource、説明は簡単です。おそらく、に保存されている画像$userphotoは、他の関数が失敗し、を返すためFALSEです。imagecreatefrompng()imagecreatefromFALSE

getimagesize()解決策:続行する前に、アップロードされた画像がで有効であることを確認してください。

アップロードが失敗する理由について考えられるいくつかの理由:

  • 一時ディレクトリに書き込まれるときに、何かがイメージを破損しています。
  • ユーザーが破損したファイルをアップロードしています。

失敗に関してimagecreatefromwbmp()は、gdがBMPファイルをサポートしていないためです。BMPをgdが使用できる形式に変換する必要があります。たとえば、bmp2pngを使用できます。

于 2012-07-07T09:55:52.190 に答える