Как изменить размер загружаемого файла php

Вы разработчик PHP или системный администратор, управляющий серверами, на которых размещаются PHP-приложения?

Вы разработчик PHP или системный администратор, управляющий серверами, на которых размещаются PHP-приложения?

Вы ищете способ увеличить или установить размер загрузки файлов в PHP?

Если да, то следуйте по этой статье, в которой показано, как увеличить размер загрузки файлов в PHP, а также объясню некоторые основные директивы PHP для обработки загрузки файлов, а также данные POST.

По умолчанию размер загрузки файлов PHP установлен на максимальный 2 МБ-файл на сервере, но вы можете увеличить или уменьшить максимальный размер загрузки файла с помощью файла конфигурации PHP (php.ini), этот файл можно найти в разных местах на разных распределения Linux.

  • Где находится php.ini?
  • Как просмотреть файлы конфигурации без комментариев в Linux
# vim /etc/php.ini                   [на Cent/RHEL/Fedora]
# vim /etc/php/7.0/apache2/php.ini   [на Debian/Ubuntu]

Чтобы увеличить размер загрузки файлов в PHP, вам необходимо изменить переменные upload_max_filesize и post_max_size в файле php.ini.

upload_max_filesize = 10M
post_max_size = 10M

Кроме того, вы также можете установить максимальное количество файлов, которые могут быть загружены одновременно, в одном запросе, используя max_file_uploads.

Обратите внимание, что из PHP 5.3.4 и более поздних версий любые поля загрузки, оставленные пустыми при представлении, не учитываются в этом пределе.

max_file_uploads = 25

Переменная post_max_size, которая используется для установки максимального размера данных POST, которые PHP примет.

Установка значения 0 отключает ограничение.

Если чтение данных POST отключено с помощью enable_post_data_reading, оно игнорируется.

После внесения вышеуказанных изменений сохраните измененный файл php.ini и перезапустите веб-сервер, используя следующие команды в ваших соответствующих дистрибутивах Linux.

--------------- SystemD --------------- 
# systemctl restart nginx
# systemctl restart httpd		
# systemctl restart apache2	
--------------- Sys Vinit ---------------
# service nginx restart
# service httpd restart		
# service apache2 restart

Перечень настроек PHP, которые могут ограничить отправку форм и файлов через POST-запрос.

1

Описание директив

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

htaccess

upload_max_filesize

Максимальный размер загружаемых файлов на сервер. По умолчанию 2Mb.

  • post_max_size должен быть больше этого значения.
  • Значение можно указать числом в байтах, K, M и G.

Пример:

php_value upload_max_filesize 100M

htaccess

max_input_vars

Максимальное количество переменных, которое может быть принято в одном запросе. По умолчанию 1000.

Если данный лимит будет превышен, то после отправки формы массив $_GET или $_POST будет пустым.

Пример:

php_value max_input_vars 2000

htaccess

max_execution_time

Директива задаёт максимальное время в секундах, в течение которого скрипт должен полностью загрузиться. Если этого не происходит, работа скрипта завершается. По умолчанию на загрузку даётся 30 секунд.

Значение «0» снимает ограничение на время выполнения.

Пример:

php_value max_execution_time 600

htaccess

Также, максимальное время выполнения скрипта задает функция set_time_limit($seconds).

max_input_time

Задаёт максимальное время в секундах, в течение которого скрипт должен разобрать все входные POST или GET данные. Это время измеряется от момента, когда PHP вызван на сервере до момента, когда скрипт начинает выполняться.

  • Значение по умолчанию «-1» – будет использоваться max_execution_time.
  • Значение «0» – без ограничений по времени.

Пример:

php_value max_input_time 600

htaccess

memory_limit

Задаёт максимальный объем памяти в байтах, который разрешается использовать скрипту. По умолчанию 128Mb.

  • memory_limit должен превышать post_max_size.
  • Чтобы убрать ограничения, установите значение «-1».

Пример:

php_value memory_limit 200M

htaccess

2

Установка директив в .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         

htaccess

3

Установка директив в 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

4

Получение значений в PHP-скрипте

Действующие значения настроек PHP можно посмотреть с помощью функции phpinfo() или получить значение параметра настройки с помощью функции ini_get($option).

Получение значения upload_max_filesize в PHP:

<?php
echo 'Максимальный размер данных: ' . ini_get('post_max_size') . '<br>';      
echo 'Максимальный размер файлов: ' . ini_get('upload_max_filesize') . '<br>'; 
echo 'Максимальное количество переменных: ' . ini_get('max_input_vars') . '<br>';     
echo 'Максимальное время выполнения скрипта: ' . ini_get('max_execution_time') . '<br>'; 
echo 'Максимальное время обработки данных: ' . ini_get('max_input_time') . '<br>';     
echo 'Память для скрипта: ' . ini_get('memory_limit') . '<br>';   

PHP

Результат:

Максимальный размер данных: 128M
Максимальный размер файлов: 128M
Максимальное количество переменных: 10000
Максимальное время выполнения скрипта: 300
Максимальное время обработки данных: -1
Память для скрипта: 1024M

5

Возможные ошибки

После отправки формы с множеством полей, массив $_POST пустой.
В форме количество полей превышает значение max_input_vars.

Ошибка «Fatal error: Allowed memory size»
Скрипт превысил значение параметра PHP memory_limit.

Ошибка «504 Gateway Time Out»
– Скрипт выполняется слишком долго, нужно увеличить значение max_execution_time. Как правило после вывода этой ошибки в браузере, скрипт будет еще какое-то время работать.

10.02.2022, обновлено 21.03.2022

Другие публикации

Примеры использования cURL в PHP

cURL PHP – это библиотека предназначенная для получения и передачи данных через такие протоколы, как HTTP, FTP, HTTPS….

Время и память выполнения скрипта PHP

Несколько методов как узнать время генерации страницы и затраченный объем памяти PHP скрипта.

Очистка данных из форм в PHP

Для предотвращения XSS, SQL-инъекций и других атак, данные полученные из форм нужно чистить. Простое экранирования кавычек не достаточно, нужен комплексный подход по типу данных.

Бот Телеграм на PHP

Примеры как зарегистрировать бота в Телеграм, описание и взаимодействие с основными методами API.

Работа с FTP в PHP

Протокол FTP – предназначен для передачи файлов на удаленный хост. В PHP функции для работы с FTP как правило всегда доступны и не требуется установка дополнительного расширения.

Автоматическое сжатие и оптимизация картинок на сайте

Изображения нужно сжимать для ускорения скорости загрузки сайта, но как это сделать? На многих хостингах нет…

Are you a PHP developer or a system administrator managing servers that host PHP applications? Are you looking for a way to increase or set file upload size in PHP? If yes, then follow this article that shows you how to increase file upload size in PHP and also will explain some of PHP’s core directives for handling file uploads as well as POST data.

By default, PHP file upload size is set to maximum 2MB file on the server, but you can increase or decrease the maximum size of file upload using the PHP configuration file (php.ini), this file can be found in different locations on different Linux distributions.

# vim /etc/php.ini                   [On Cent/RHEL/Fedora]
# vim /etc/php/7.0/apache2/php.ini   [On Debian/Ubuntu]

To increaes file upload size in PHP, you need to modify the upload_max_filesize and post_max_size variable’s in your php.ini file.

upload_max_filesize = 10M
post_max_size = 10M

In addition, you can also set the maximum number of files allowed to be uploaded simultaneously, in a single request, using the max_file_uploads. Note that from PHP 5.3.4 and laster versions, any upload fields left blank on submission do not count towards this limit.

max_file_uploads = 25

The variable post_max_size which is used to set the maximum size of POST data that PHP will accept. Setting a value of 0 disables the limit. If POST data reading is disabled via enable_post_data_reading, then it is ignored.

Once you have made the above changes, save the modified php.ini file and restart the web server using following commands on your respective Linux distributions.

--------------- SystemD --------------- 
# systemctl restart nginx
# systemctl restart httpd		
# systemctl restart apache2	

--------------- Sys Vinit ---------------
# service nginx restart
# service httpd restart		
# service apache2 restart	

Thats It! In this short article, we have explained how to increase the file upload size in PHP. If you know any other way or have any questions do share with us using our comment section below.

If You Appreciate What We Do Here On TecMint, You Should Consider:

TecMint is the fastest growing and most trusted community site for any kind of Linux Articles, Guides and Books on the web. Millions of people visit TecMint! to search or browse the thousands of published articles available FREELY to all.

If you like what you are reading, please consider buying us a coffee ( or 2 ) as a token of appreciation.

Support Us

We are thankful for your never ending support.

Этот список включает встроенные директивы php.ini, которые вы можете использовать для
настройки PHP. Директивы, которые обрабатываются модулями, перечислены и подробно
описаны на страницах документаций соответствующих модулей.
К примеру, информация о директивах сессий может быть найдена на
странице документации сессий.

Замечание:

Представленные здесь значения по умолчанию используются в случае, если не был
подключён php.ini; значения для боевого php.ini и для разработки могут различаться.

Языковые опции

Опции языка и прочих настроек

Имя По умолчанию Место изменения Список изменений
short_open_tag «1» PHP_INI_PERDIR  
precision «14» PHP_INI_ALL  
serialize_precision «-1» PHP_INI_ALL До версии PHP 7.1.0 значение по умолчанию было равно 17.
disable_functions «» Только PHP_INI_SYSTEM  
disable_classes «» Только php.ini  
exit_on_timeout «» PHP_INI_ALL  
expose_php «1» Только php.ini  
hard_timeout «2» PHP_INI_SYSTEM Доступна с версии PHP 7.1.0.
zend.exception_ignore_args «0» PHP_INI_ALL Доступна с версии PHP 7.4.0
zend.multibyte «0» PHP_INI_ALL  
zend.script_encoding NULL PHP_INI_ALL  
zend.detect_unicode NULL PHP_INI_ALL  
zend.signal_check «0» PHP_INI_SYSTEM  
zend.assertions «1» PHP_INI_ALL с ограничениями  
zend.exception_string_param_max_len «15» PHP_INI_ALL Доступно, начиная с PHP 8.0.0.

Краткое разъяснение конфигурационных
директив.

short_open_tag
bool

Определяет, разрешается ли короткая форма записи (<? ?>)
тегов PHP. Если вы хотите использовать PHP совместно с XML, вы можете отключить эту
опцию, чтобы беспрепятственно использовать <?xml ?>.
В противном случае, вы можете отобразить это при помощи PHP, например:
<?php echo '<?xml version="1.0"?>'; ?>.
Если же эта опция отключена, вы должны использовать длинную форму
открывающего тега PHP (<?php ?>).

Замечание:

Эта директива не влияет на сокращение <?=,
которое всегда доступно.

precision
int


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

serialize_precision
int


Количество сохраняемых значащих цифр при сериализации чисел с плавающей точкой.
-1 означает, что будет использован усовершенствованный алгоритм
для округления таких чисел.

expose_php
bool

Выдаёт факт присутствия PHP на сервере, включая передачу версии PHP в
HTTP-заголовке (например, X-Powered-By: PHP/5.3.7).

disable_functions
string

Эта директива позволяет отключить некоторые функции. Она принимает список имён функций, разделённый запятыми.

Только внутренние функции могут быть
отключены с помощью этой директивы. Пользовательские функции ей не подвержены.

Эта директива должна быть установлена в php.ini. Например,
её нельзя использовать в httpd.conf.

disable_classes
string


Эта директива позволяет отключить некоторые классы. Она принимает список имён классов, разделённых запятыми.


Эта директива должна быть установлена в php.ini. Например,
её нельзя использовать в httpd.conf.

zend.assertions
int


Если задано значение 1, проверочный код будет исполняться (режим
разработки). Если задан 0, код проверок будет сгенерирован, однако
исполняться не будет. Если задано -1, проверочный код не будет
генерироваться (продуктивный режим).

Замечание:

Если процесс запущен в режиме релиза, zend.assertions
не может быть изменён во время выполнения, так как код утверждений не генерируется.

Если процесс запущен в режиме разработки, zend.assertions
не может быть выставлен в -1 во время выполнения..

zend.exception_string_param_max_len
int


Максимальная длина аргументов строковой функции в строковых трассировках стека.
Значение должно быть в диапазоне от "0" до "1000000".

hard_timeout
int

Когда истечёт время ожидания, установленное в max_execution_time,
среда выполнения PHP аккуратно отключит ресурсы. Если во время этого что-то застрянет, время ожидания будет
установлено на указанное количество секунд. Когда истечёт жёсткое время ожидания, PHP завершит работу с ошибкой.
Если установлено значение 0, жёсткое время ожидания никогда не активируется.

Когда PHP останавливается после жёсткого времени ожидания, это будет выглядеть примерно так:

        Fatal error: Maximum execution time of 30+2 seconds exceeded (terminated) in Unknown on line 0
zend.exception_ignore_args
bool

Исключает аргументы из трассировки стека, сгенерированных из исключений.

zend.multibyte
bool

Разрешает парсинг исходных файлов в многобайтных кодировках. Включение
zend.multibyte требуется для использования кодировок символов подобных SJIS, BIG5 и
т.д., содержащих специальные символы в многобайтных строковых данных. Совместимые
с ISO-8859-1 кодировки, например UTF-8, EUC и т.д., не требуют эту опцию.

Модуль zend.multibyte требует установленного модуля «mbstring».

zend.script_encoding
string

Данное значение будет использовано, только при отсутствии директивы
declare(encoding=…)
в начале скрипта. При использовании кодировок несовместимых с ISO-8859-1,
нужно использовать опции и zend.multibyte и zend.script_encoding.

Литеральные строки должны быть транслитерированы из zend.script_encoding в
mbstring.internal_encoding, как если бы вызвали mb_convert_encoding().

zend.detect_unicode
bool

Определяет, нужно ли проверять BOM (Byte Order Mark, метка порядка байт) и
корректность многобайтных символов в файле. Эта проверка производится до вызова
__halt_compiler(). Доступна только в режиме Zend Multibyte.

zend.signal_check
bool

Определяет, нужно ли проверять заменённые обработчики сигналов при завершении скрипта.

exit_on_timeout
bool

Эта директива только для Apache1 mod_php, которая заставляет потомка Apache
завершиться, если превышено время ожидания исполнения скрипта PHP. Превышение времени ожидания приводит
к внутреннему вызову longjmp() в Apache1, который оставляет некоторые модули в
несогласованном состоянии. По завершении процесса все неснятые блокировки или
память будут очищены.

Ограничения ресурсов

Ограничения ресурсов

Имя По умолчанию Место изменения Список изменений
memory_limit «128M» PHP_INI_ALL  

Краткое разъяснение конфигурационных
директив.

memory_limit
int

Эта директива задаёт максимальный объем памяти в байтах, который разрешается
использовать скрипту. Это помогает предотвратить ситуацию, при которой плохо
написанный скрипт съедает всю доступную память сервера. Для того, чтобы убрать
ограничения, установите значение этой директивы в -1.

Если используется int, значение измеряется байтами. Вы также можете использовать сокращённую запись, которая описана в этом разделе FAQ.

Смотрите также: max_execution_time.

Настройка производительности

Настройка производительности

Имя По умолчанию Место изменения Список изменений
realpath_cache_size «4M» PHP_INI_SYSTEM До PHP 7.0.16 и 7.1.2, по умолчанию было "16K"
realpath_cache_ttl «120» PHP_INI_SYSTEM  

Замечание:

Использование open_basedir
отключит кеш realpath.

Краткое разъяснение конфигурационных
директив.

realpath_cache_size
int

Определяет размера кеша realpath, используемого в PHP. Это значение
должно быть увеличено на системах, в которых PHP открывает большое
количество файлов соответственно количеству выполняемых файловых операций.

Размер равный общему числу байт, хранящимся в строках путей, плюс размер данных
связанных с кешируемым элементом. Это значит, что для хранения длинных путей в кеше,
размер этого кеша должен быть больше. Это значение не определяет напрямую
количество разных путей, которые могут быть закешированы.

Размер, необходимый для кеширования, зависит от системы.

realpath_cache_ttl
int

Время (в секундах) в течение которого будет использован кеш realpath
для указанного файла или директории. Для систем с редко меняющимися файлами
это значение можно увеличить.

Обработка данных

Конфигурационные опции обработки данных

Имя По умолчанию Место изменения Список изменений
arg_separator.output «&» PHP_INI_ALL  
arg_separator.input «&» PHP_INI_PERDIR  
variables_order «EGPCS» PHP_INI_PERDIR  
request_order «» PHP_INI_PERDIR  
auto_globals_jit «1» PHP_INI_PERDIR  
register_argc_argv «1» PHP_INI_PERDIR  
enable_post_data_reading «1» PHP_INI_PERDIR  
post_max_size «8M» PHP_INI_PERDIR  
auto_prepend_file NULL PHP_INI_PERDIR  
auto_append_file NULL PHP_INI_PERDIR  
default_mimetype «text/html» PHP_INI_ALL  
default_charset «UTF-8» PHP_INI_ALL  
input_encoding «» PHP_INI_ALL  
output_encoding «» PHP_INI_ALL  
internal_encoding «» PHP_INI_ALL  

Краткое разъяснение конфигурационных
директив.

arg_separator.output
string

Этот разделитель используется в генерируемых PHP URL в качестве разделителя
аргументов.

arg_separator.input
string

Список разделителей, используемых PHP для получения переменных из URL.

Замечание:

Каждый символ в этой директиве считается разделителем!

variables_order
string

Устанавливает порядок обработки переменных EGPCS
(Environment,
Get, Post,
Cookie, и Server).
Например, если variables_order установлена в "SP",
то PHP создаст superglobals $_SERVER и
$_POST, но не будет создавать
$_ENV, $_GET и
$_COOKIE. Установка в «» означает, что ни
одна superglobals не будет установлена.

Внимание

В CGI и FastCGI SAPI,
в $_SERVER также добавляются значения
переменных окружения; S
всегда эквивалентна ES вне зависимости от
самого положения E в этой директиве.

Замечание:

Эта директива также влияет на содержимое и порядок переменной
$_REQUEST.

request_order
string

Эта директива регулирует порядок, в котором PHP добавляет переменные GET, POST
и Cookie в массив _REQUEST. Добавление производится слева направо,
новые значения перезаписывают старые.

Если значение этой директивы не установлено, то используется значение директивы variables_order для содержимого
переменной $_REQUEST.

Учтите, что файлы php.ini, поставляемые с дистрибутивом,
по соображениям безопасности не содержат значение 'C' (cookies).

auto_globals_jit
bool

Когда включено, переменные SERVER, REQUEST и ENV создаются в тот момент, когда они
впервые используются (Just In Time), а не в начале выполнения скрипта. Если эти
переменные в скрипте не используются, включение этой директивы приведёт к росту
производительности.

Внимание

Использование переменных SERVER, REQUEST и ENV проверяется на стадии компиляции,
поэтому их использование с помощью, например, переменных переменных не
запустит их инициализацию.

register_argc_argv
bool


Сообщает PHP, следует ли объявлять переменные argv и argc
(которые будут содержать GET-информацию).


Смотрите также Использование PHP в командной
строке.

enable_post_data_reading
bool


При отключении этой опции суперглобальные переменные $_POST
и $_FILES не будут заполняться.
Единственным способом прочесть POST-данные будет чтение обёртки потока
php://input.
Это может оказаться полезным при проксировании запросов или
обработки POST-данных способом, более эффективно использующим память.

post_max_size
int


Устанавливает максимально допустимый размер данных, отправляемых методом POST.
Это значение также влияет на загрузку файлов. Для загрузки больших файлов это
значение должно быть больше значения директивы
upload_max_filesize.


В сущности,
memory_limit должна быть
больше чем post_max_size.

Если используется int, значение измеряется байтами. Вы также можете использовать сокращённую запись, которая описана в этом разделе FAQ.


Если размер POST-данных больше чем post_max_size,
суперглобальные переменные
$_POST и $_FILES
будут пустыми. Это можно отследить различными способами, например
передав $_GET переменную в скрипт, обрабатывающий
данные, т.е. <form action="edit.php?processed=1">,
а затем проверить, установлена ли переменная $_GET[‘processed’].

Замечание:

PHP разрешает сокращения значений байт, включая K (кило), M (мега) и G (гига).
PHP автоматически преобразует все эти сокращения. Будьте осторожны с превышением
диапазона 32-битных целых значений (если вы используете 32-битную версию), так как
это приведёт к ошибке вашего скрипта.

Список изменений post_max_size

Версия Описание
5.3.4 Установка post_max_size = 0 не снимет ограничение, если
контент имеет тип application/x-www-form-urlencoded или не зарегистрирован в PHP.
5.3.2 , 5.2.12 Стало возможным снять ограничение на размер пост-запроса установкой
post_max_size в 0.
auto_prepend_file
string

Определяет имя файла, который будет автоматически обрабатываться
перед основным файлом. Файл вызывается так, будто он был подключён
при помощи функции require, так что
include_path также используется.

Специальное значение none отключает эту директиву.

auto_append_file
string

Определяет имя файла, который будет автоматически обрабатываться
после основного файла. Файл вызывается так, будто он был подключён
при помощи функции require, так что
include_path тоже используется.

Специальное значение none отключает эту директиву.

Замечание:

Если скрипт завершает работу при помощи exit(),
auto-append НЕ выполняется.

default_mimetype
string

По умолчанию PHP выводит название кодировки в заголовке Content-Type. Если
передавать кодировку не требуется, просто оставьте эту опцию пустой.

«media type» по умолчанию установлен как «text/html».

default_charset
string

«UTF-8» является значением по умолчанию и используется как
кодировка по умолчанию для функций
htmlentities(),
html_entity_decode() и
htmlspecialchars(), если параметр
encoding не указан. Значение
default_charset также используется для указания
кодировки по умолчанию для функций iconv, если
конфигурационные опции
iconv.input_encoding, iconv.output_encoding
и
iconv.internal_encoding
не установлены, и для функций
mbstring, если не установлены
mbstring.http_input
mbstring.http_output
mbstring.internal_encoding.

Все версии PHP используют это значение как кодировку для
стандартного заголовка Content-Type, отправляемого PHP, если
этот заголовок не переопределён вызовом функции header().

Не рекомендуется устанавливать default_charset
в пустое значение.

input_encoding
string

Эта опция используется для многобайтных модулей,
таких как mbstring и iconv. По умолчанию пусто.

output_encoding
string

Эта опция используется для многобайтных модулей,
таких как mbstring и iconv. По умолчанию пусто.

internal_encoding
string

Эта опция используется для многобайтных модулей,
таких как mbstring и iconv. По умолчанию пусто. В это случае используется
default_charset.

Пути и Директории

Конфигурационные Опции Путей и Директорий

Имя По умолчанию Место изменения Список изменений
include_path «.;/path/to/php/pear» PHP_INI_ALL  
open_basedir NULL PHP_INI_ALL  
doc_root NULL PHP_INI_SYSTEM  
user_dir NULL PHP_INI_SYSTEM  
user_ini.cache_ttl «300» PHP_INI_SYSTEM  
user_ini.filename «.user.ini» PHP_INI_SYSTEM  
extension_dir «/path/to/php» PHP_INI_SYSTEM  
extension NULL Только php.ini  
zend_extension NULL Только php.ini  
cgi.check_shebang_line «1» PHP_INI_SYSTEM  
cgi.discard_path «0» PHP_INI_SYSTEM  
cgi.fix_pathinfo «1» PHP_INI_SYSTEM  
cgi.force_redirect «1» PHP_INI_SYSTEM  
cgi.nph «0» PHP_INI_SYSTEM  
cgi.redirect_status_env NULL PHP_INI_SYSTEM  
cgi.rfc2616_headers «0» PHP_INI_ALL  
fastcgi.impersonate «0» PHP_INI_SYSTEM  
fastcgi.logging «1» PHP_INI_SYSTEM  

Краткое разъяснение конфигурационных
директив.

include_path
string

Указывает список директорий, в которых функции
require, include,
fopen(), file(),
readfile() и file_get_contents()
ищут файлы. Формат соответствует формату системной переменной окружения
PATH: список директорий,
разделённых двоеточием в Unix или точкой с запятой в Windows.

При поиске подключаемых файлов PHP отдельно рассматривает каждое
значение в include_path.
Он проверяет первый путь, если файл в нем не найден, то он переходит
к следующему, и так до тех пор, пока не найдёт подключаемый файл, либо
вернёт
E_WARNING
или E_ERROR.
Вы можете изменить ваш include_path во время выполнения скрипта с
помощью функции
set_include_path().

Пример #1 include_path в Unix

include_path=".:/php/includes"

Пример #2 include_path в Windows

include_path=".;c:phpincludes"

Использование . в include_path позволяет
задавать относительные пути для подключения файлов, так как
точка означает текущую директорию. Однако, более эффективно
использовать include './file', чем заставлять
PHP каждый раз проверять текущую директорию при подключении каждого файла.

Замечание:

Переменные окружения (ENV) также доступны в .ini файлах.
Таким образом, можно ссылаться на домашнюю директорию с помощью директив
${LOGIN} и ${USER}.

Переменные окружения могут отличаться между различными серверными API,
так как сами эти окружения отличаются друг от друга.

Пример #3 Настройка include_path с помощью переменной окружения ${USER} в Unix

include_path = ".:${USER}/pear/php"
open_basedir
string

Ограничивает указанным деревом каталогов файлы, которые могут быть доступны для
PHP, включая сам файл.

Когда скрипт пытается получить доступ к файлу, например, с помощью функции
fopen() или gzopen(),
проверяется местонахождение файла. Если файл находится вне указанного
дерева каталогов, PHP откажется его открывать. Все символические
ссылки будут раскрыты, так что с их помощью не удастся обойти это
ограничение. Если файл не существует, то символическая ссылка не сможет
быть прочитана и имя файла (прочитанное) будет рассматриваться
open_basedir.

Опция open_basedir может распространяться не только на функции для
работы с файловой системой; например, если MySQL настроен
использовать драйвер mysqlnd, то LOAD DATA INFILE
подпадает под опцию open_basedir.
Множество функций PHP также использует open_basedir.

Специальное значение .
обозначает, что рабочая директория скрипта будет использована в качестве
базовой директории. Однако, это немного опасно, так как текущая директория
скрипта может быть легко изменена с помощью chdir().

В httpd.conf, open_basedir может быть
выключена (например, для некоторых виртуальных хостов)
тем же способом, что и любая
другая конфигурационная директива: «php_admin_value open_basedir
none
«.

В Windows разделяйте директории точкой с запятой. На всех остальных системах,
разделяйте директории двоеточием. При работе в качестве модуля Apache, пути
open_basedir автоматически наследуются от родительских директорий.

Ограничение, определяемое open_basedir является
именем директории, а не префиксом.

По умолчанию все файлы могут быть открыты.

Замечание:

Значение open_basedir можно сделать
более строгим во время выполнения скрипта. Это означает, что если
open_basedir была установлена в /www/ в php.ini,
то скрипт может ужать конфигурацию до
/www/tmp/ во время выполнения с помощью
ini_set(). При указании нескольких директорий
можно использовать константу PATH_SEPARATOR
в качестве разделителя путей, не зависящего от операционной системы.

Замечание:

Использование опции open_basedir установит realpath_cache_size
на значение 0 и таким образом отключит кеш realpath.

Предостережение

open_basedir — это просто дополнительная подстраховка,
которая никоим образом не является всеобъемлющей
и поэтому на неё нельзя полагаться, когда речь идёт о безопасности.

doc_root
string

«Корневая директория» PHP на этом сервере. Используется только в
случае, если не пустая.
Если PHP не был скомпилирован с FORCE_REDIRECT, вам следует
установить doc_root, если вы используете PHP в качестве
CGI под любым веб-сервером (кроме IIS). Альтернативой является
использование конфигурационной директивы
cgi.force_redirect,
речь о которой идёт ниже.

user_ini.cache_ttl
int
user_ini.filename
string
user_dir
string

Базовое имя директории, используемой в домашнем каталоге пользователя
для PHP файлов, например, public_html.

extension_dir
string

В какой директории PHP должен искать динамически загружаемые модули.
Рекомендуется указывать абсолютный путь. Смотрите
также: enable_dl и dl().

extension
string

Какие динамически загружаемые модули должны быть загружены при старте PHP.

zend_extension
string

Имя динамически загружаемого модуля Zend (например,
XDebug), который должен быть загружен при старте PHP.

cgi.check_shebang_line
bool

Контролирует, нужно ли проверять первую строку CGI
PHP-скрипта на содержание #! (shebang).
Эта строка может быть необходима, если скрипт должен поддерживать как отдельный
запуск, так и с помощью PHP CGI. PHP в режиме
CGI пропускает эту строку и игнорирует её
содержимое, если данная директива включена.

cgi.discard_path
bool

Если разрешено, бинарный файл PHP CGI может безопасно располагаться вне веб-дерева
и люди не смогут обойти безопасность .htaccess.

cgi.fix_pathinfo
bool

Обеспечивает поддержку правильных
PATH_INFO/PATH_TRANSLATED
в CGI. Раньше PHP просто устанавливал
PATH_TRANSLATED в SCRIPT_FILENAME
и не обращал внимания на PATH_INFO.
Для получения дополнительной информации о PATH_INFO,
обратитесь к спецификации CGI. Установка этого
значения в 1 заставит PHP CGI
исправлять свой путь в соответствии со спецификацией. Значение 0
соответствует предыдущему поведению. По умолчанию опция включена.
Вы должны исправить свои скрипты так, чтобы они использовали
SCRIPT_FILENAME вместо PATH_TRANSLATED.

cgi.force_redirect
bool

Директива cgi.force_redirect необходима для обеспечения безопасности
во время работы PHP в качестве CGI под большинством
веб-серверов. Если оставить её неопределённой, по умолчанию PHP включает эту
директиву. Вы можете выключить её на свой страх и
риск
.

Замечание:

Пользователям Windows: При использовании IIS эта опция
должна быть отключена. Тоже самое необходимо
для OmniHTTPD и Xitami.

cgi.nph
bool

Если cgi.nph разрешена, cgi будет принудительно возвращать код 200 на каждый запрос.

cgi.redirect_status_env
string

Если cgi.force_redirect включена и вы работаете не под веб-сервером
Apache или Netscape (iPlanet), вам может
понадобиться установить переменную окружения, которую будет искать
PHP чтобы убедиться, что он может продолжать выполнение.

Замечание:

Установка этой переменной может повлечь за собой проблемы с
безопасностью, так что вы должны знать, что вы делаете.

Сообщает PHP, какой тип заголовков использовать при отправке
кода ответа HTTP. Если установлено в 0, PHP отправляет
» RFC 3875 заголовок
«Status:», который поддерживается Apache и другими веб-серверами.
Если установлено в 1, PHP отправляет заголовки, соответствующие
» RFC 2616.

Если эта опция включена и вы используете PHP в окружении CGI (например,
PHP-FPM), то вместо использования HTTP-заголовков ответа в стиле
RFC 2616, нужно использовать их эквивалент из стандарта RFC 3875, например,
вместо header(«HTTP/1.0 404 Not found»); нужно использовать
header(«Status: 404 Not Found»);

Оставьте в значении 0, если вы не уверены в том, что это значит.

fastcgi.impersonate
string

FastCGI под IIS (в ОС на базе WINNT) поддерживает возможность имперсонации прав
безопасности вызывающего клиента. Это позволяет IIS определить контекст безопасности,
в котором выполняется запрос. mod_fastcgi под Apache на текущий момент не
поддерживает эту возможность (03/17/2002).
Установите в 1 при работе под IIS. Значение по умолчанию — ноль.

fastcgi.logging
bool

Включает логирование SAPI при использовании FastCGI. Логирование
включено по умолчанию.

Закачивание Файлов

Конфигурационные Опции Закачивания Файлов

Имя По умолчанию Место изменения Список изменений
file_uploads «1» PHP_INI_SYSTEM  
upload_tmp_dir NULL PHP_INI_SYSTEM  
max_input_nesting_level 64 PHP_INI_PERDIR  
max_input_vars 1000 PHP_INI_PERDIR  
upload_max_filesize «2M» PHP_INI_PERDIR  
max_file_uploads 20 PHP_INI_PERDIR  

Краткое разъяснение конфигурационных
директив.

file_uploads
bool

Разрешать или не разрешать
закачивание файлов. Смотрите также директивы
upload_max_filesize,
upload_tmp_dir и
post_max_size.

upload_tmp_dir
string

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

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

upload_max_filesize
int

Максимальный размер закачиваемого файла.

post_max_size должен быть больше, чем это значение.

Если используется int, значение измеряется байтами. Вы также можете использовать сокращённую запись, которая описана в этом разделе FAQ.

max_file_uploads
int

Максимально разрешённое количество одновременно закачиваемых файлов.
Пустые поля загрузки не рассматриваются этим ограничением.

Общий SQL

Конфигурационные Опции Общего SQL

Имя По умолчанию Место изменения Список изменений
sql.safe_mode «0» PHP_INI_SYSTEM Удалён в PHP 7.2.0

Краткое разъяснение конфигурационных
директив.

sql.safe_mode
bool

Если включена, функции соединения с базой данных, использующие
значения по умолчанию, будут использовать эти значения вместо
любых передаваемых аргументов. Для значений по умолчанию смотрите
документацию по функциям подключения соответствующей базы данных.

Внимание

Эта опция УДАЛЕНА в PHP 7.2.0.

Особые настройки для ОС Windows

Особые опции конфигурации для ОС Windows

Имя По умолчанию Место изменения Список изменений
windows.show_crt_warning «0» PHP_INI_ALL  

Краткое разъяснение конфигурационных
директив.

windows.show_crt_warning
bool

При включении данной директивы будут отображаться предупреждения Windows CRT.

csg at DEL_THISdiatom dot de

17 years ago


Starting with PHP 4.4.0 (at least PHP version 4.3.10 did have old, documented behaviour) interpretation of value of "session.save_path" did change in conjunction with "save_mode" and "open_basedir" enabled.

Documented ( http://de.php.net/manual/en/ref.session.php#ini.session.save-path ):
  Values of "session.save_path" should or may be  **without**  ending slash.
  For instance:
<?php
 
// Valid only  *before* PHP 4.4.0:
 
ini_set( "session.save_path", "/var/httpd/kunde/phptmp" );
?> will mean:
  The directory "/var/httpd/kunde/phptmp/" will be used to write data and therefore must be writable by the web server.

Starting with PHP 4.4.0 the server complains that "/var/httpd/kunde/" is not writable.
Solution: Add an ending slash in call of ini_set (or probably whereever you set "session.save_path"), e.g.:
<?php
 
// Note the slash on ".....phptmp/":
 
ini_set( "session.save_path", "/var/httpd/kunde/phptmp/" );
?>

Hope, that does help someone.


Simone Pellegatta

2 years ago


Be careful while using auto_prepend_file.

When the custom exception handler, set by set_exception_handler(), handles an uncaught exception, it interrupts the execution of every script.

If the script with the unhandled exception has been automatically prepended or included by an automatically prepended script, however, the main script will continue running anyway.

This could cause several issues: when we think that throwing an exception would automatically interrupt the current application, a whole chunk of code is going to run anyway.


diamondeagle at webmail dot co dot za

3 years ago


Note regarding the upload_tmp_dir setting and UNC Paths:

When using PHP on Windows OS and IIS FastCGI, if you need to use a UNC path to a folder on a network drive for the upload_tmp_dir setting then you must use three characters at the front of the UNC path.

Windows and PHP use the first slash as an escape character, so if you only use two slashes then it passes a UNC path with just one backslash. That is not valid for UNC paths and you many experience problems when uploading files, such as errors saying that "PHP is missing a temporary folder".

Correct:
upload_tmp_dir = "\pathtoyourfolder"

Incorrect:
upload_tmp_dir = "\pathtoyourfolder"


Anton Bannikov

2 years ago


I had a problem with 'open_basedir =' string in php.ini. This string was writtren in VirtualHost Directory directive of Apache2 and successfully rewrote the same php.ini setting! It happened with VestaCP, but I think, it's a common way. Goog luck!

fernandobasso dot br at gmail dot com

6 years ago


This might help in case someone happens to maintain old applications with a charset other than utf-8.

According to the docs, you can override the default charset if you use `header()`.

Suppose php.ini sets the default_charset to "UTF-8", but you need a legacy charset, like ISO-8859-1.

Still,

<?php header('Content-Type: text/html; Charset=ISO-8859-1'); ?>

would not override the charset, just add it as well and the result
was a response header like (note the two charsets):

    Content-Type:"text/html; Charset=ISO-8859-1;charset=UTF-8"

I found it strange the default one as `charset` with a lowercase `c`
as opposed to my custom charset with an uppercase `C`.

What solved was to _override_ the charset using all lowercase letters
as well for the word “charset”:

<?php header('content-type: text/html; charset=ISO-8859-1'); ?>

Then, the double charset from the response headers disappeared, and only the single, custom charset remained.


andre dot wetter at myelco dot ch

1 year ago


If you use Microsoft IIS Windows and want to use open_basedir restrictions with multiple dirs you have to set them into single quotes in the main config xml file of IIS (C:WindowsSystem32inetsrvconfigapplicationHost.config). Works fine in IIS 10.

Multiple files with single quotes and ; for windows:
"C:phpphp-cgi.exe|-d open_basedir='C:WindowsTemp;D:mywebsite1'"

Only one dir works fine without single quotes:
"C:phpphp-cgi.exe|-d open_basedir=D:mywebsite1"

In my main config xml file of IIS there are 2 nodes to set per website and the definitions have to be equal:
configurationLocationsystem.webServerhandlersadd
configurationsystem.webServerfastCgi


dougal at gunters dot org

6 years ago


It appears that if you use both the 'include_path' directives and 'open_basedir', that file searches will hit the include path *first*, before local files. But if 'open_basedir' is not in use, then local files are found first. For example, suppose you have code in '/var/www/myfile.php' which does:

<?php
 
require_once('config.php');
?>

Further, assume that there is a local file '/var/www/config.php', and there is also a file '/var/local/php/config.php'.

Next, if your php.ini has:

  include_path = /var/local/php/

Normally, this would look for '/var/www/config.php' first, and if not found, then it would try '/var/local/php/config.php'.

But if you also have this in php.ini:

  open_basedir = /var/www/:/var/local/php/

Then the require would reverse the order of the search, and load '/var/local/php/config.php', even when the local 'config.php' file exists.

Furthermore, if include_path contains directories not in open_basedir, you can end up with a fatal error. For example, change the directive to:

  open_basedir = /var/www/:/var/local/includes/php/

Now the require will first find '/var/local/php/config.php' from the include_path, try to include it, but be unable to because of the open_basedir restrictions.


benjamin at chazelle dot pro

18 days ago


With auto_globals_jit enabled, filter functions (filter_has_var, filter_input...) do not work with INPUT_SERVER and INPUT_ENV because they are not considered as static uses of $_SERVER and $_ENV.

The workaround is to use these global variables directly.


rlammers at linuxmail dot org

12 years ago


This is a possible solution for a problem which seems to be a php-ini-problem but is not.

If a $_POST is used with large fields e.g. textarea's with more than 120kb characters php returns a blank screen, even if the max_post_size is 8M.

This problem may be caused by an apache-module SecFilter.

Adding the following lines to the .htaccess solves the problem.
SecFilterEngine Off
SecFilterScanPOST Off

I know this is not a php-issue, but i'm still posting it here since it looks like it is a php-problem and I did not find any sites or forums offering this solution.


mrok at mrok dot com

13 years ago


Note that on some Unix systems (i.e. PHP 5.1.6 on Centos 5.2) include_path in php.ini should NOT be quoted.

For example, instead of

include_path='.:/usr/share/php'

use

include_path=.:/usr/share/php

Using quotes does not cause any error message, but all of your require_once() directives will fail (indicating that file could not be opened) - unless full path to target file is provided.


alaa morad

4 years ago


add enctype="multipart/form-data" to your <form> tag or it will not upload any file even if file_uploads=on
ex:
<form method="POST" action="upload. php" enctype="multipart/form-data">
// form contents
</form>

leo at korfu dot cz

16 years ago


"If the size of post data is greater than post_max_size..."

It seems that a more elegant way is comparison between post_max_size and $_SERVER['CONTENT_LENGTH']. Please note that the latter includes not only size of uploaded file plus post data but also multipart sequences. Leo


amolitor at molitor-design dot com

13 years ago


Amusingly, the include_path logically includes the current directory of the running file as the last entry all the time anyways, so part of the business about shoving "." into the include_path is spurious -- it's "there" on the end all the time, at least in the 5.2.12 source (see main/fopen_wrappers.c around line 503).

This one had me goin' for a while.


AntonioK

11 years ago


Note that there is no way to disable eval() work by using disable_functions directive, because eval() is a language construct and not a function.

Many people advise to disable such potentially-insecure functions like system(), exec(), passthru(), eval() and so on in php.ini when not running in safe mode, but eval() would still work even it listed in disable_functions.


kghbln

11 years ago


Adding multiple directories to open_basedir:

open_basedir = "/var/www/htdocs/:/var/www/tmp/" adds both paths /var/www/htdocs/ and /var/www/tmp/. Do not forget the trailing slash, otherwise the last directory will be considered as a prefix (< 5.3.4).

On Windows you use ; as the seperator.


iko at vision dot sk

10 years ago


auto_globals_jit setting is also affecting $_REQUEST superglobal in 5.3 It is not explicitly stated in documentation.

Adam

6 years ago


Remember that `open_basedir` restriction does not affect exec functions. As long as you do not disable exec functions (see `disable_functions`, users will be able to use `exec("/bin/cat [...]")` to access sensitive world readable files.

bohwaz

4 months ago


Please be advised that setting a large post_max_size or upload_max_filesize for a complete server or a complete virtual host is not a good idea as it may lead to increased security risks.

The risk is that an attacker may send very large POST requests and overloading your server memory and CPU as it has to parse and process those requests before handling them to your PHP script.

So it's best to limit changing this setting to some files or directories. For example if I want to /admin/files/ and /admin/images/ I can use:

<If "%{REQUEST_URI} =~ m!^/admin/(files|images)/! && -n %{HTTP_COOKIE}">
    php_value post_max_size 256M
    php_value upload_max_filesize 256M
</If>

I also require the request to have a cookie to avoid basic attacks. This will not protect you against attacks coming from non-authenticated users, but may delay any attack.

This setting can be used in Apache server configuration files, and .htaccess files as well.


michael dot buergi at gmx dot net

9 years ago


the ini-setting "detect_unicode" is indeed "zend.detect_unicode" (according to the phpinfo of my 5.4.4)

abc500x500 at gmail dot com

5 years ago


Please illuminate this:
memory_limit=128mb meaning which?

1-per script only then if in a moment 1000 user request php script maximum only 128mb of server ram use6 by script.
2-per script + per user if in a moment 1000 user request a php script about 1000*128mb=128gb ram use by script.
Thanks


По умолчанию 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
  • Редактирование файла .htaccess
  • Изменение файла wp-config.php
  • Изменение лимитов в WHM
  • Заключение

Если вы используете CPanel, перейдите в раздел «Файлы» и нажмите кнопку «Диспетчер файлов». Убедитесь, что установлен флажок «Показать скрытые файлы», а затем нажмите на кнопку «Перейти».

Выберите папку wp-admin и найдите файл php.ini или php5.ini. Если такого файла нет, создайте его, нажав на кнопку «Создать файл», расположенную в верхнем левом углу. Назовите файл php.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 должен иметь среднее значение.

Прежде чем проверить, не исчезла ли ошибка, очистите кэш браузера.

Если редактирование 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, добавив следующий код в самый низ, перед строкой «happy blogging«:

define(‘WP_MEMORY_LIMIT’, ‘3000M’);

Сохраните файл и очистите кэш браузера.

Если сайт размещен на VPS или выделенном сервере, можно попробовать изменить лимиты в WHM.

После того, как вы вошли в систему, перейдите в раздел Конфигурация сервера> Настройки > PHP.

Изменение лимитов в WHM

Введите нужные вам значения и нажмите кнопку «Сохранить».

Затем перейдите в раздел Конфигурация служб> Редактор конфигурации PHP. Прокрутите страницу вниз до разделов memory_limit и upload_max_filesize:

Изменение лимитов в WHM - 2

Введите необходимые значения. В разделе «Параметры и информация» найдите memory_limit и задайте то же значение, которое вы установили в memory limit php ini и .htaccess.

Нажмите кнопку «Сохранить» и очистите кэш браузера.

Мы рассмотрели все способы решения данной проблемы. Наслаждайтесь возможностью загружать большие файлы и продолжайте использовать на своем сайте плагины WordPress. Внесенные в php memory limit htaccess изменения должны вступить в силу через несколько минут, после чего можно будет приступить к работе с новыми параметрами.

Если нужно загрузить большие файлы только один раз, попробуйте сделать это через FTP. Обычно файлы, загруженные через FTP в каталог /wp-content/uploads/, не отображаются в библиотеке медиа. Но с помощью плагина Media from FTP можно отобразить их всего в несколько кликов.

Если ни один из вариантов не дал результата, свяжитесь со своим хостинг-провайдером.

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Как изменить размер жалюзийной двери
  • Как изменить размер жалюзи на пластиковые окна
  • Как изменить размер единицы распределения
  • Как изменить размер документа при печати
  • Как изменить размер документа пдф файла

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии