0

値が配列内にあるかどうかを確認するスクリプトと単純な if チェックがあります。if タグが配列内にあるときに実行される理由がわからないようです。

else if (!in_array($type, $avatarformats)) {

$error .= '<div class="alert error">You\'re image is not a allowed format</div>';

unlink($_FILES['file']['tmp_name']);

}

スクリプトが $type と $avatarformats を読み取ると、次のようになります。

$avatarformats = Array ( [0] => .jpg [1] => .jpeg [2] => .png ) 

$type = .png

.png が配列内にあるため、if タグが実行されるべきではないときに実行されます。それとも、私は何をしているのか理解していません。

4

3 に答える 3

2

タイプをどのように判断したかはわかりませんが、通常、ファイル名自体の拡張子ではなく、コンテンツ タイプ (例: )['type']から取得されます。$_FILES'image/jpeg'

ファイル拡張子をテストするには、次のコードを使用できます。

// get file extension (without leading period)
$ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);

// ...
elseif (!in_array($ext, array('png', 'jpg', 'jpeg'))) {
    // error
}
于 2012-11-01T03:14:35.023 に答える
0

注:exif_imagetype()を使用してください。http://www.php.net/manual/en/function.exif-imagetype.phpをお読みください。

function image_allowed($imgfile) {
  $types = array(IMAGETYPE_JPEG, IMAGETYPE_PNG);
  return in_array(exif_imagetype($imgfile), $types);
}

次に、コードで。

else if (!image_allowed($_FILES['file']['tmp_name'])) {

$error .= '<div class="alert error">You\'re image is not a allowed format</div>';

unlink($_FILES['file']['tmp_name']);

}
于 2012-11-01T03:27:21.150 に答える
-2

in_array()ステートメント!in_array($type, $avatarformats)が完全停止のためにtrueと評価されているため、trueを返していると思われます。$type小数点以下のため、整数として値を評価しています。

2 つのオプションがあると言われています。2) または条件を次のように変更します。else if (in_array($type, $avatarformats) == false) {

in_array()奇妙な獣であり、私は最善のときにそれを避けようとします. isset() はあなたの友人であり、ほとんどの条件下で in_array よりもはるかに高速です。

于 2012-11-01T03:15:49.033 に答える