文件未上传

I'm on linux, running xampp. index.php

    <form class="well" action="upload.php" method="post" enctype="multipart/form-data">
        <div class="form-group">
            <label for="file">Select a file to upload</label>
            <input type="file" name="file">
            <p class="help-block">Only jpg, jpeg, png, wav, mp3, wav and mp4 files are allowed.</p>
        </div>
        <input type="submit" class="btn btn-lg btn-primary" value="Upload">
    </form>

upload.php

<?php
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {

        $name     = $_FILES['file']['name'];
        $tmpName  = $_FILES['file']['tmp_name'];
        $error    = $_FILES['file']['error'];
        $size     = $_FILES['file']['size'];
        $ext      = strtolower(pathinfo($name, PATHINFO_EXTENSION));

        switch ($error) {
            case UPLOAD_ERR_OK:
                $valid = true;
                //validate file extensions
                if ( !in_array($ext, array('jpg','jpeg','png','mp3', 'mp4', 'wav', 'webm')) ) {
                    $valid = false;
                    $response = 'Invalid file extension.';
                }
                //validate file size
                /*if ( $size/1024/1024 > 2 ) {
                    $valid = false;
                    $response = 'File size is exceeding maximum allowed size.';
                }*/
                //upload file
                if ($valid) {
                    $targetPath =  'uploads/';

                    move_uploaded_file($tmpName,$targetPath);
                    header( 'Location: index.php' ) ;
                    exit;
                }
                break;
            case UPLOAD_ERR_INI_SIZE:
                $response = 'The uploaded file exceeds the upload_max_filesize directive in php.ini.';
                break;
            case UPLOAD_ERR_FORM_SIZE:
                $response = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.';
                break;
            case UPLOAD_ERR_PARTIAL:
                $response = 'The uploaded file was only partially uploaded.';
                break;
            case UPLOAD_ERR_NO_FILE:
                $response = 'No file was uploaded.';
                break;
            case UPLOAD_ERR_NO_TMP_DIR:
                $response = 'Missing a temporary folder. Introduced in PHP 4.3.10 and PHP 5.0.3.';
                break;
            case UPLOAD_ERR_CANT_WRITE:
                $response = 'Failed to write file to disk. Introduced in PHP 5.1.0.';
                break;
            case UPLOAD_ERR_EXTENSION:
                $response = 'File upload stopped by extension. Introduced in PHP 5.2.0.';
                break;
            default:
                $response = 'Unknown error';
            break;
        }

        echo $response;
    }

    ?>

Phpinfo: file upload on, Max file size 128M. uploads folder is empty, it's in the root directory where the script is located, no errors are displayed and nothing seems wrong with the script

So you kinda need to get to the folder you are trying to access. I had the same problem i think a while back. The solution i found was doing this with the $targetpath:

You need to get the webserver path, in order to do this you use the dirname(__FILE__) function. Depending on how far you are going to go in the file path. Forexample i needed to access a folder "nydemo1/bilder/images/folders/" then i needed this for my filepath variable:

dirname(dirname(dirname(__FILE__)) //because this is 3 folders deep

Hope this helps

You should check the return value of move_uploaded_file.

if ($valid) 
{
    $targetPath =  'uploads/';

    if(move_uploaded_file($tmpName,$targetPath))
    {
       header( 'Location: index.php' ) ;
       exit;
    }
    else
    {
        $response = 'Moving the file to the target directory failed.';
    }
}

If this gives you an error, use an absolute path for $targetPath.

Edit: You also need to include the file name to use as the target, not only the directory. So change the code to:

    if(move_uploaded_file($tmpName, $targetPath . $name))
    {