我正在尝试使用此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中无效?
答案 0 :(得分: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
}
答案 1 :(得分:0)
无论浏览器如何,PHP的工作方式都相同。
您需要查看HTML代码。
这就是问题所在。