PHP文件上传问题

时间:2017-12-06 16:51:58

标签: php file

我目前正在开发一个用户可以上传音乐的网站。您可以设置要显示的各种类型。现在,问题是有时(不知道为什么)上传对某些文件失败。错误不会显示。它绝对不是权限错误,因为上传适用于大多数文件。 我已经在这里看了很多并试了很多东西,但没有什么对我有用。 这是我的代码:

HTML

<form method="post" action="musicupload.php" enctype="multipart/form-data">
    Choose an MP3 or WAV file<file></file>
    <br /><br />
    <input type="file" name="fileToUpload" id="fileToUpload" required>
    <br /><br />
    <fieldset>
        Genre
        <br />
        <input type="radio" id="db" name="Genre" value="Dubstep" required checked>
        <label for="db"> Dubstep</label>
        <input type="radio" id="trap" name="Genre" value="Trap" required>
        <label for="trap"> Trap</label>
        <input type="radio" id="BB" name="Genre" value="Bass Boosted" required>
        <label for="bb"> Bass Boosted</label>
        <input type="radio" id="other" name="Genre" value="Other" required>
        <label for="other"> Other</label>
    </fieldset>
    <br />
    <input type="submit" value="Upload Song" name="submit">
</form>

PHP

<?php
/**
 * Created by IntelliJ IDEA.
 * User: Marc
 * Date: 04.12.2017
 * Time: 20:07
 */
require 'db.php';

$target_dir = "uploadedmusic/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$filename=$_FILES["fileToUpload"]['name'];
$ext = pathinfo($filename, PATHINFO_EXTENSION);
$genre = $_POST["Genre"];
$successfull = false;

if(isset($_POST["submit"])) {
    // Check extensions
    if ($ext != "mp3" && $ext != "wav") {
        echo "Sorry, only MP3 & WAV files are allowed.";
        $uploadOk = 0;
    }

    if ($uploadOk == 0) {
        echo "Sorry, your file was not uploaded.";
        // if everything is ok, try to upload file
    } else {
        if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
            $hash = md5_file("uploadedmusic/".$filename);
            //echo "The file " . basename($_FILES["fileToUpload"]["name"]) . " has been uploaded.";
            $sql = "INSERT INTO `music` (`id`, `filename`, `genre`, `uploaded`, `hash`) VALUES (NULL, '$filename', '$genre', CURRENT_TIMESTAMP, '$hash')";
            $conn->query($sql);
            $successfull = true;
        } else {
            $successfull = false;
        }
    }
}

?>

<html>
<head>
    <title>Upload Music</title>
</head>
<body>
<div style="text-align: center;">
     <img src="logo.png">
<h1>Please wait...</h1>
<p style="font-size: 35px;">
    <?php
    if ($successfull == true) {
        echo "Successfully uploaded ". basename($_FILES["fileToUpload"]["name"])."! Use the search to find it!";
    }
    else {
        echo "Sorry, there was an error uploading your file. Check for potential invalid characters like () or - in your filename!";
    }


    ?>
</p>
    <a style="font-size: 35px" href="main.php">Start listening!</a>
</div>
</body>
</html>

1 个答案:

答案 0 :(得分:1)

您需要查看文件上传错误才能找到确切的问题。

echo $_FILES["fileToUpload"]["error"] // this will give you the error code.

可能的错误是。点击此链接http://php.net/manual/en/features.file-upload.errors.php

$phpFileUploadErrors = array(
    0 => 'There is no error, the file uploaded with success',
    1 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini',
    2 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form',
    3 => 'The uploaded file was only partially uploaded',
    4 => 'No file was uploaded',
    6 => 'Missing a temporary folder',
    7 => 'Failed to write file to disk.',
    8 => 'A PHP extension stopped the file upload.',
);

除了检查扩展名之外,您的代码中还需要添加条件来检查上传错误

if ($uploadOk == 0 || $_FILES["fileToUpload"]["error"]!== UPLOAD_ERR_OK) {
   echo "Sorry, your file was not uploaded.";
   // if everything is ok, try to upload file
}