4

現在、ユーザーがファイルをアップロードできるようにする PHP アプリケーションを構築しています。現在、アップロード ページにいますが、認証システムが機能しません。このシステムを使用して、ファイルをオーディオ ファイルとして検証しています。

// Set our file name and extension
$fname     = $_FILES['file']['name'];
$extension = strtolower(substr($fname, strpos($fname, '.') + 1));

// Check file
if ($extension == 'mp3' && $_FILES['file']['type'] == 'audio/mpeg') {
    //File is valid mp3
} else {
    //File is invalid
}

これは機能しませんが、奇妙なことに、エコー アウト$_FILES['file']['type']すると、オーディオ ファイルの MIME タイプがエコー アウトされません。他のファイルタイプに対してこれを行うと、正常にエコーアウトされます。

音声ファイルのみの MIME タイプは提供されません。WAV および M4A ファイルで試してみましたが、これらのいずれでも返されません。それはファイルタイプの問題ですか、それとも xampp サーバーで .htaccess ファイルまたは MIME.types ファイルを編集する必要がありますか。また、アップロードされたファイルを検証するためのより良い方法はありますか?

また、これは私の xampp サーバーと、テスト目的で使用している無料のサーバーでも行われることに注意してください。

助けてくれてありがとう。

4

1 に答える 1

4

$_FILES['file']['type']ファイルをアップロードするブラウザから取得されるため、この値にまったく依存することはできません。

finfo_fileファイルの内容に基づいてファイルの種類を識別する方法を確認してください。ユーザーが mp3 拡張子を持つ悪意のあるコードをアップロードする可能性があるため、ファイルの拡張子も信頼できません。

于 2012-10-22T22:55:22.297 に答える