如何仅上传具有特定扩展名的文件


How to upload a file with specific extension only?

我只想上传扩展名为.mp3的文件。

我尝试使用以下代码上传文件:

index.php

<form action="upload.php" method="post" id="myForm" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" class="btn btn-success" value="Upload Image">
</form>

upload.php

$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ($extension == "mp3"){
    $target = "upload/";
    move_uploaded_file($_FILES["file"]["tmp_name"], $target. $_FILES["file"]["name"]);
}
else {
    echo "Failed";
}

我的代码有什么问题?

尝试以下代码:

$name = $_FILES["file"]["name"];
$extension = end((explode(".", $name))); //extra () to prevent notice
if ($extension == "mp3"){
    $target = "upload/";
    move_uploaded_file($_FILES["file"]["tmp_name"], $target. $_FILES["file"]["name"]);
}
else {
    echo "Failed";
}

这应该有效。确保$_FILES["file"]["name"]的适当价值

你也可以使用 pathinfo()。例如:

$path_parts = pathinfo($_FILES["file"]["name"]);
$extension = $path_parts['extension'];

这似乎是字符串大小写比较的情况。以较低或较高格式进行比较应该有效。

$temp = end(explode(".", $_FILES["file"]["name"]));
$extension = strtolower($temp);
if ($extension == "mp3"){
    $target = "upload/";
    move_uploaded_file($_FILES["file"]["tmp_name"], $target. $_FILES["file"]["name"]);
}
else {
    echo "Failed";
}

我认为 OP 错过了表单标签中的表单类型。下面是经过测试的代码:

<?php
if(!empty($_POST)){
    $temp = explode(".", $_FILES["file"]["name"]);
    $extension = end($temp);
    if ($extension == "mp3"){
        $target = "upload/";
    move_uploaded_file($_FILES["file"]["tmp_name"], $target. $_FILES["file"]["name"]);
    }
    else {  
        echo "Failed";  
    }
}
?>
<form method="post" enctype="multipart/form-data">
<input type='file' name='file'/>
<input type='submit' name='submit'/>
</form>