Загрузка файла на сервер

Discussion in 'PHP' started by herfleisch, 23 Dec 2012.

  1. herfleisch

    herfleisch Elder - Старейшина

    Joined:
    7 Jan 2009
    Messages:
    578
    Likes Received:
    203
    Reputations:
    13
    Всем привет.

    Я в PHP не особо силен, но пролистав несколько страниц гугла я понял что моя ситуация не типичная.

    Мне нужно с помощью скрипта загрузить файл на сервер. Для этого я нашел в интернете очень простой html-файл:

    HTML:
    <html>
    <body>
    
    <form action="upload.php" method="post"
          enctype="multipart/form-data">
        <label for="file">Filename:</label>
        <input type="file" name="file" id="file"><br>
        <input type="submit" name="submit" value="Submit">
    </form>
    
    </body>
    </html>
    и такой жепростой скрипт:

    PHP:
    <?php
    $allowedExts 
    = array("jpg""jpeg""gif""png");
    $extension end(explode("."$_FILES["file"]["name"]));
    if (((
    $_FILES["file"]["type"] == "image/gif")
        || (
    $_FILES["file"]["type"] == "image/jpeg")
        || (
    $_FILES["file"]["type"] == "image/png")
        || (
    $_FILES["file"]["type"] == "image/pjpeg"))
        && (
    $_FILES["file"]["size"] < 20000)
        && 
    in_array($extension$allowedExts))
    {
        if (
    $_FILES["file"]["error"] > 0)
        {
            echo 
    "Return Code: " $_FILES["file"]["error"] . "<br>";
        }
        else
        {
            echo 
    "Upload: " $_FILES["file"]["name"] . "<br>";
            echo 
    "Type: " $_FILES["file"]["type"] . "<br>";
            echo 
    "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
            echo 
    "Temp file: " $_FILES["file"]["tmp_name"] . "<br>";

            if (
    file_exists("upload/" $_FILES["file"]["name"]))
            {
                echo 
    $_FILES["file"]["name"] . " already exists. ";
            }
            else
            {
                
    move_uploaded_file($_FILES["file"]["tmp_name"],
                    
    "upload/" $_FILES["file"]["name"]);
                echo 
    "Stored in: " "upload/" $_FILES["file"]["name"];
            }
        }
    }
    else
    {
        echo 
    "Invalid file<br />";
        
    print_r($_FILES);
    }
    ?>
    Как и следовало ожидать - файл не загружается. Вся проблема в том, что в $_FILES["file"]["error"] ничего не содержится. После "загрузки" массив $_FILES имеет следующий вид:

    Code:
    Array ( [file] => Array ( [name] => avatar-95x95.jpg ) )
    в php.ini:

    post_max_size = 8M
    file_uploads = On
    upload_max_filesize = 2M

    и т.д., все в общем учтено и все выставлено как нужно.

    Картинку я загружаю именно нормальную JPEG, с расширением jpg. Впрочем, даже когда я вообще убираю все эти проверки на тип файла - все равно все то же самое происходит.