Задать вопрос

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

Всем привет.

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

Мне нужно с помощью скрипта загрузить файл на сервер. Для этого я нашел в интернете очень простой 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 
$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 имеет следующий вид:

Array ( [file] => Array ( [name] => avatar-95x95.jpg ) )


в php.ini:

post_max_size = 8M
file_uploads = On
upload_max_filesize = 2M

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

Картинку я загружаю именно нормальную JPEG, с расширением jpg. Впрочем, даже когда я вообще убираю все эти проверки на тип файла — все равно все то же самое происходит. Пробовал на разных браузерах. Скрипт крутится на моем instance на amazon aws ec2 под управлением SuSE Linux, Apache2.
  • Вопрос задан
  • 44211 просмотров
Подписаться 16 Оценить 2 комментария
Ответ пользователя Anatol Pohorilyi К ответам на вопрос (7)
dekameron
@dekameron
Запустил ваш же пример. все работает.
Единственное, что пришлось сменить мне:
1. увеличить лимит размера
$_FILES["file"]["size"] < 20000
(19Кб ну очень уже мало)
2.
$extension = strtolower(end(explode(".", $_FILES["file"]["name"])));
(фотка, попавшаяся под руку, имела расширение .JPG, а не .jpg)
Ответ написан
Комментировать