0

これが私のコードです:

if ( $_FILES['photo']['type'] != "image/jpeg" )
    echo "You attempted to upload a file of type: " . $_FILES['photo']['type'] . " ... The file must be a JPEG.";

ご覧のとおり、私のコードは、ファイルの種類が JPEG かどうかをチェックしています... JPEG の場合は続行し、それ以外の場合は続行しません。

しかし、タイプは JPEG ですが、そうではないというエコーを受け取り続けます。

「次のタイプのファイルをアップロードしようとしました: image/jpeg ... ファイルは JPEG でなければなりません。」

ファイルが JPEG でない限り、その echo ステートメントを実行する方法はありません。

4

4 に答える 4

1

MIME タイプを信用しないでください。確実に確認したい場合は、ファイルを開いて最初の数バイトを読み取り、それが JPEG ファイル ヘッダーかどうかを確認します。

本当に確実に知りたい場合は、 を使用imagecreatefromjpegして実際に jpeg ファイルを読み込みます。これが失敗した場合は、MIME タイプとファイル ヘッダーが何を示していても、明らかに本物の jpeg ファイルではありません。GDこの機能を使用するには、利用可能である必要があることに注意してください。

于 2012-12-08T00:02:25.450 に答える
0

ファイルのアップロードには簡単なコードを使用します。MIME タイプではなく、実際にファイル拡張子をチェックします。コードは以下です -

function getFileExtention($name) {
    $split = explode('.',$name);
    $splitCount = count($split) - 1;
    return strtolower($split[$splitCount]);
}

if(getFileExtention($_FILES['input']['name'] != "jpg" && getFileExtention($_FILES['input']['name'] != "jpeg") {
  echo "You attempted to upload a file of type: " . $_FILES['photo']['type'] . " ... The file must be a JPEG.";
}
于 2012-12-08T01:05:28.843 に答える
0

$_FILES配列で指定された MIME タイプまたはファイル名に依存するのは安全ではありません。これらはブラウザーによって指定されるためです。

代わりに使用finfo_fileします。これは、ファイルのヘッダー/コンテンツに基づいてサーバー側でチェックします。

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimeType = finfo_file($finfo, $_FILES['input']['tmp_name']);
if ($mimeType != "image/jpeg") {
    echo "You attempted to upload a file of type: " . $mimeType . " ... The file must be a JPEG.";
}
finfo_close($finfo);

ドキュメントについては、 http://php.net/manual/en/function.finfo-file.phpを参照してください。

于 2012-12-08T01:24:28.497 に答える