- php memory limit или как увеличить лимиты на размер загружаемых файлов и объем выделяемой памяти
- Обновление файла php.ini
- Редактирование файла .htaccess
- Изменение файла wp-config.php
- Изменение лимитов в WHM
- Заключение
- Ограничения загрузки файлов php
- Установка лимитов PHP на обработку данных из форм
- Описание директив
- post_max_size
- Пример в htaccess:
- upload_max_filesize
- Пример:
- max_input_vars
- Пример:
- max_execution_time
- Пример:
- max_input_time
- Пример:
- memory_limit
- Пример:
- Установка директив в .htaccess
- Установка директив в PHP-скрипте
- Получение значений в PHP-скрипте
- Получение значения upload_max_filesize в PHP:
- Результат:
- Возможные ошибки
php memory limit или как увеличить лимиты на размер загружаемых файлов и объем выделяемой памяти
По умолчанию WordPress устанавливает небольшой лимит на размер загружаемых изображений, видеороликов и других файлов. Аналогичная ситуация с PHP memory limit , который сказывается на возможности запускать плагины и скрипты.
Если вы запускаете сайт с большим количеством контента, эти лимиты могут стать проблемой. Можно получить ошибку при загрузке:
Объем загружаемого файла превышает ограничение, заданное директивой upload_max_filesize в файле php.ini
Если достигнут предел выделяемой памяти, то выведется другое сообщение об ошибке:
Неустранимая ошибка: допустимый размер памяти 12345678 байт исчерпан (вы пытались выделить 2345678 байт) в /home/your-username/public_html/wp-includes/plugin.php в строке 1000
Рассмотрим наиболее эффективные способы увеличения этих лимитов на сервере. Начнем с memory limit php ini .
Обновление файла php.ini
Если вы используете CPanel , перейдите в раздел « Файлы » и нажмите кнопку « Диспетчер файлов ». Убедитесь, что установлен флажок « Показать скрытые файлы », а затем нажмите на кнопку « Перейти ».
Выберите папку wp-admin и найдите файл php.ini или php5.ini . Если такого файла нет, создайте его, нажав на кнопку « Создать файл », расположенную в верхнем левом углу. Назовите файл php.ini и нажмите во всплывающем окне кнопку « Создать файл »:
Если ошибка не исчезла, попробуйте переименовать файл в php5.ini . Когда файл будет открыт, добавьте в него приведенные ниже строки, а затем сохраните изменения и закройте файл:
upload_max_filesize = 1000M post_max_size = 2000M memory_limit = 3000M file_uploads = On max_execution_time = 180
M — означает мегабайты. Измените лимиты 1000M, 2000M и 3000M на значения, которые необходимы. Изменение значения max_execution_time ограничит время загрузки скрипта.
Во многих случаях используемые значения должны увеличиваться по мере перехода в списке от первой до третьей строки. Upload_max_filesize должен быть самым маленьким, memory limit php ini — самым большим. При этом post_max_size должен иметь среднее значение.
Прежде чем проверить, не исчезла ли ошибка, очистите кэш браузера.
Редактирование файла .htaccess
Если редактирование php.ini не помогло, попробуйте изменить файл .htaccess . Добавьте приведенный ниже код в конец файла:
php_value upload_max_filesize 1000M php_value post_max_size 2000M php_value memory_limit 3000M php_value max_execution_time 180 php_value max_input_time 180
Измените значения php ini set memory limit так, как вам нужно. Не забудьте сохранить файл и очистить кэш браузера.
Изменение файла wp-config.php
Если оба способа не дали результата, попробуйте отредактировать файл wp-config.php , добавив следующий код в самый низ, перед строкой » happy blogging «:
Сохраните файл и очистите кэш браузера.
Изменение лимитов в WHM
Если сайт размещен на VPS или выделенном сервере, можно попробовать изменить лимиты в WHM .
После того, как вы вошли в систему, перейдите в раздел Конфигурация сервера> Настройки > PHP .
Введите нужные вам значения и нажмите кнопку « Сохранить ».
Затем перейдите в раздел Конфигурация служб> Редактор конфигурации PHP . Прокрутите страницу вниз до разделов memory_limit и upload_max_filesize :
Введите необходимые значения. В разделе « Параметры и информация » найдите memory_limit и задайте то же значение, которое вы установили в memory limit php ini и .htaccess .
Нажмите кнопку « Сохранить » и очистите кэш браузера.
Заключение
Мы рассмотрели все способы решения данной проблемы. Наслаждайтесь возможностью загружать большие файлы и продолжайте использовать на своем сайте плагины WordPress . Внесенные в php memory limit htaccess изменения должны вступить в силу через несколько минут, после чего можно будет приступить к работе с новыми параметрами.
Если нужно загрузить большие файлы только один раз, попробуйте сделать это через FTP . Обычно файлы, загруженные через FTP в каталог /wp-content/uploads/ , не отображаются в библиотеке медиа. Но с помощью плагина Media from FTP можно отобразить их всего в несколько кликов.
Если ни один из вариантов не дал результата, свяжитесь со своим хостинг-провайдером.
Ограничения загрузки файлов php
Опция MAX_FILE_SIZE не должна позволять передачу файлов, размер которых превышает лимит, установленный конфигурационной директивой upload_max_filesize в php.ini . Ограничение по умолчанию составляет 2 мегабайта.
В случае, если установлены ограничения памяти, вам может понадобиться увеличить значение опции memory_limit. Убедитесь в том, что значение memory_limit достаточно велико.
В случае, если опция max_execution_time установлена слишком маленьким значением, необходимое время работы скрипта может превышать это значение. Убедитесь в том, что значение max_execution_time достаточно велико.
Замечание: Директива max_execution_time касается исключительно времени, используемого непосредственно самим скриптом. Время, потраченное на внешние действия, такие как системные вызовы при помощи функции system() или sleep() , обращения к базе данных, а также время, потраченное на загрузку файла и другие действия, происходящие вне скрипта, не учитываются при определении максимально допустимого промежутка времени, отведённого для выполнения скрипта.
Директива max_input_time указывает максимально допустимое время в секундах для получения входящих данных, в том числе и загружаемых файлов. В случае, если вы имеете дело с несколькими или большими файлами, либо удалённые пользователи используют медленный канал, ограничение по умолчанию в 60 секунд может быть превышено.
Если директива post_max_size слишком мала, большие файлы не смогут быть загружены на сервер. Убедитесь, что значение директивы post_max_size достаточно велико.
Опция max_file_uploads контролирует максимальное количество загружаемых файлов в течение одного запроса. Если загружается большее количество файлов, чем указано в этом ограничении, то массив $_FILES прекратит дальнейшую обработку файлов по достижении этого ограничения. Например, если max_file_uploads установлено в 10 , то $_FILES никогда не будет содержать больше 10 элементов.
Если не проверять, с какими файлами вы работаете, пользователи могут получить доступ к конфиденциальной информации, расположенной в других директориях.
Поскольку разные системы по-разному работают с файловой структурой, нет никаких гарантий того, что файлы с экзотическими именами (например, которые содержат пробельные символы) будут обработаны корректно.
Разработчики не должны использовать одинаковые имена для обычных полей ввода (тег input ) и полей выбора файла в пределах одной и той же формы (например, используя имя для тега input наподобие foo[] ).
Установка лимитов PHP на обработку данных из форм
Перечень настроек PHP, которые могут ограничить отправку форм и файлов через POST-запрос.
Описание директив
post_max_size
Устанавливает максимальный размер данных, отправленных методом POST, включая размер загружаемых файлов, по умолчанию 8Mb .
- Для загрузки больших файлов это значение должно быть больше значения upload_max_filesize.
- Значение можно указать числом в байтах, K (в килобайтах), M (в мегабайтах) и G (в гигабайтах).
- Значение «0» снимает ограничение только в версиях PHP 5.3.2 и 5.2.12.
Пример в htaccess:
php_value post_max_size 100M
upload_max_filesize
Максимальный размер загружаемых файлов на сервер. По умолчанию 2Mb.
Пример:
php_value upload_max_filesize 100M
max_input_vars
Максимальное количество переменных, которое может быть принято в одном запросе. По умолчанию 1000.
Если данный лимит будет превышен, то после отправки формы массив $_GET или $_POST будет пустым.
Пример:
php_value max_input_vars 2000
max_execution_time
Директива задаёт максимальное время в секундах, в течение которого скрипт должен полностью загрузиться. Если этого не происходит, работа скрипта завершается. По умолчанию на загрузку даётся 30 секунд.
Значение «0» снимает ограничение на время выполнения.
Пример:
php_value max_execution_time 600
Также, максимальное время выполнения скрипта задает функция set_time_limit($seconds) .
max_input_time
Задаёт максимальное время в секундах, в течение которого скрипт должен разобрать все входные POST или GET данные. Это время измеряется от момента, когда PHP вызван на сервере до момента, когда скрипт начинает выполняться.
- Значение по умолчанию «-1» – будет использоваться max_execution_time.
- Значение «0» – без ограничений по времени.
Пример:
php_value max_input_time 600
memory_limit
Задаёт максимальный объем памяти в байтах, который разрешается использовать скрипту. По умолчанию 128Mb.
Пример:
php_value memory_limit 200M
Установка директив в .htaccess
# Максимальный размер данных php_value post_max_size 110M # Максимальный размер файлов php_value upload_max_filesize 100M # Максимальное количество переменных php_value max_input_vars 2000 # Максимальное время выполнения скрипта php_value max_execution_time 600 # Максимальное время обработки данных php_value max_input_time 600 # Память для скрипта php_value memory_limit 200M
Установка директив в PHP-скрипте
ini_set('post_max_size', '110M'); // Максимальный размер данных ini_set('upload_max_filesize', '100M'); // Максимальный размер файлов ini_set('max_input_vars', '2000'); // Максимальное количество переменных ini_set('max_execution_time', '600'); // Максимальное время выполнения скрипта ini_set('max_input_time', '600'); // Максимальное время обработки данных ini_set('memory_limit', '200M'); // Память для скрипта
Получение значений в PHP-скрипте
Действующие значения настроек PHP можно посмотреть с помощью функции phpinfo() или получить значение параметра настройки с помощью функции ini_get($option) .
Получение значения upload_max_filesize в PHP:
'; echo 'Максимальный размер файлов: ' . ini_get('upload_max_filesize') . '
'; echo 'Максимальное количество переменных: ' . ini_get('max_input_vars') . '
'; echo 'Максимальное время выполнения скрипта: ' . ini_get('max_execution_time') . '
'; echo 'Максимальное время обработки данных: ' . ini_get('max_input_time') . '
'; echo 'Память для скрипта: ' . ini_get('memory_limit') . '
';
Результат:
Максимальный размер данных: 128M Максимальный размер файлов: 128M Максимальное количество переменных: 10000 Максимальное время выполнения скрипта: 300 Максимальное время обработки данных: -1 Память для скрипта: 1024M
Возможные ошибки
После отправки формы с множеством полей, массив $_POST пустой.
– В форме количество полей превышает значение max_input_vars.
Ошибка «Fatal error: Allowed memory size»
– Скрипт превысил значение параметра PHP memory_limit.
Ошибка «504 Gateway Time Out»
– Скрипт выполняется слишком долго, нужно увеличить значение max_execution_time. Как правило после вывода этой ошибки в браузере, скрипт будет еще какое-то время работать.