$ _FILE при загрузке большого файла выдает ошибку 1, даже если upload_max_size больше размера файла - PullRequest
27 голосов
/ 23 ноября 2010

У меня есть простая форма загрузки с:

enctype="multipart/form-data"/>

и

input type="hidden" name="MAX_FILE_SIZE" value="5900000" />

и следующими настройками, которые применяются (проверяются через phpini ()) в php.ini:

upload_max_filesize = 7MB  
memory_limit = 64M  
post_max_size = 8MB  

Я пытаюсь загрузить файл небольшого размера - 500 КБ, и он проходит через

Я пытаюсь загрузить файл размером 5 МБ (меньше, чем upload_max_filesize и post_max_sizeнастройки), и он завершается с ошибкой с кодом 1: где указано:

UPLOAD_ERR_INI_SIZE Значение: 1;Загруженный файл превышает директиву upload_max_filesize в php.ini.

Кто-нибудь знает, что происходит?

Ответы [ 5 ]

53 голосов
/ 23 ноября 2010

Я думаю, это из-за опечатки.Вместо

upload_max_filesize = 7MB

следует читать

upload_max_filesize = 7M

, снова использовать phpinfo(), чтобы проверить, какое значение фактически применяется.

7 голосов
/ 14 августа 2012

Вы также должны установить post_max_size в "php.ini"

3 голосов
/ 17 августа 2012
upload_max_filesize = 7M

Здесь значение равно 7M или 10M, но не MB.

Используйте phpinfo() еще раз, чтобы проверить, какое значение на самом деле было применено.

Используйте код ниже, чтобы понять, в чем проблема. Если проблема заключается в размере файла, он просто выводит значение, превышающее директиву upload_max_filesize в php.ini

<?php
$error_types = array(
    1 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.',
    'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.',
    'The uploaded file was only partially uploaded.',
    'No file was uploaded.',
    6 => 'Missing a temporary folder.',
    'Failed to write file to disk.',
    'A PHP extension stopped the file upload.'
);

// Outside a loop...
if ($_FILES['userfile']['error'] == 0) {
    // here userfile is the name
    // i.e(<input type="file" name="*userfile*" size="30" id="userfile">
    echo "no error ";
} else {
    $error_message = $error_types[$_FILES['userfile']['error']];
    echo $error_message;
}
?>

По этому мы можем легко определить проблему. Мы также можем использовать switch(){ case } для печати вышеуказанных сообщений об ошибках.

1 голос
/ 25 февраля 2014

Вот большая ошибка, которую я сделал:

Если вы хотите загружать действительно большие файлы, вы должны установить KeepAliveTimeout выше значения по умолчанию 5 секунд.

Например:

KeepAliveTimeout 300

Вы можете найти это свойство в /etc/apache2/apache2.conf

0 голосов
/ 11 июня 2014

Перейти к W HM->Service Configuration->PHP Configuration Editor и обновить значение upload_max_filesize.

...