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";
      }

谁能告诉 if 部分中它在 Firefox 中不起作用的问题是什么?

4

2 回答 2

1

这是因为文件类型具有音频/类型名称,并且您将其与类型匹配。

尝试使用 in_array 函数并使用 preg_replace 删除音频/

$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 回答