1

この PHP スクリプトを使用して、アップロード中にファイルの拡張子を確認しようとしています。問題は、Chrome では完全に機能することですが、Firefox では拡張子が正しい場合でも常に false を返すため、「無効なファイル」が常にエコーされます。

    $allowedExts = array("mp3", "wma", "wav", "ogg", "aac", "aiff", "amr", "ra");
    $arr = explode(".", $_FILES["file"]["name"]);
    $extension = end($arr);

    if ((($_FILES["file"]["type"] == "audio/mp3")
    || ($_FILES["file"]["type"] == "audio/wma")
    || ($_FILES["file"]["type"] == "audio/wav")
    || ($_FILES["file"]["type"] == "audio/ogg")
    || ($_FILES["file"]["type"] == "audio/aac")
    || ($_FILES["file"]["type"] == "audio/aiff")
    || ($_FILES["file"]["type"] == "audio/amr")
    || ($_FILES["file"]["type"] == "audio/ra"))
    && ($_FILES["file"]["size"] < 20000000)
    && in_array($extension, $allowedExts))
      {
       .
       .
       .
       .
      }
    else
      {
      echo "Invalid file";
      }

Firefox で動作しない if セクションの問題を誰か教えてください。

4

2 に答える 2

1

これは、ファイル タイプにオーディオ/タイプ名があり、それをタイプだけに一致させるためです。

in_array 関数を使用してみて、preg_replace を使用して audio/ を削除してください

$allowedExts = array("mp3", "wma", "wav", "ogg", "aac", "aiff", "amr", "ra");
$allowedSize = 20000000;
$currentType = preg_replace('/(.*)(/)/','',$_FILES['file']['type']);
$currentSize = $_FILES['file']['size'];

if( in_array($currentType,$allowedExts) && $currentSize < $allowedSize ) 
{
    // DO UPLOAD 
    // REFER TO http://php.net/manual/en/function.move-uploaded-file.php
}
else
{
    // ERROR UPLOADING FILE
}
于 2012-10-19T18:52:48.780 に答える
0

PHP はブラウザに関係なく同じように動作します。

HTML コードを確認する必要があります。

そこに問題があります。

于 2012-10-19T18:48:08.833 に答える