php_value и php_flag в .htaccess: как поменять настройки PHP
Строки php_value и php_flag в .htaccess меняют настройки PHP для папки сайта и вложенных папок. На своём сервере с Apache они работают, когда PHP подключён к Apache модулем, а на хостинге — если об этом сказано в его справке. Если Apache этих строк не знает, сайт отвечает ошибкой 500: тогда настройки меняют файлом .user.ini или в панели хостинга.
Содержание 13
Что сделать прямо сейчас
- Перед правкой сохраните копию файла .htaccess к себе на компьютер: если что-то пойдёт не так, её можно будет вернуть.
- Узнайте, работают ли строки php_value у вас: на хостинге или на своём VPS.
- Впишите строку в .htaccess в корневой папке сайта ([где лежит файл](/spravochnik/fajl-htaccess/#где-лежит-файл)) — как записывать. Сохраните файл и сразу откройте сайт. Если появилась ошибка 500, уберите добавленные строки — сайт заработает как раньше.
- Проверьте новое значение через phpinfo() — как.
Как записывать строки
Строка состоит из трёх частей через пробел: php_value, имя настройки и значение. Знак равенства не нужен: так пишут в php.ini, а в .htaccess имя и значение разделяет пробел.
php_value memory_limit 256M
php_value upload_max_filesize 64M
php_value post_max_size 80M
php_value max_execution_time 300Настройки, которые включают и выключают, задают строкой php_flag:
php_flag display_errors offphp_flag включает настройку только значением on — его можно писать и большими буквами — или цифрой 1, а любое другое слово, например yes или true, настройку выключит.
Строки действуют на папку с файлом .htaccess и на вложенные папки, а свой .htaccess во вложенной папке может задать другое значение. Чтобы вернуть значение из php.ini, удалите строку.
Когда это работает
На своём сервере с Apache строки php_value и php_flag понимает модуль PHP для Apache. Если PHP работает через PHP-FPM, Apache таких строк не знает: сайт отвечает ошибкой 500, а в журнале ошибок появляется запись Invalid command 'php_value', perhaps misspelled…. Тогда уберите строку и задайте настройку файлом .user.ini — настройки PHP для одного сайта.
На хостинге строки работают, если об этом сказано в справке хостинга, — подробнее. На сайте с nginx файлы .htaccess не читаются вовсе — .htaccess в nginx.
Ещё Apache должен разрешать в .htaccess группу Options — на своём VPS.
Какие настройки можно поменять
| Настройка | Строка | Подробнее |
|---|---|---|
| лимит памяти | php_value memory_limit 256M | memory_limit |
| размер загружаемого файла | php_value upload_max_filesize 64M | upload_max_filesize |
| размер всего запроса — больше размера файла | php_value post_max_size 80M | почему больше |
| время работы скрипта в секундах | php_value max_execution_time 300 | Maximum execution time |
| число полей в форме | php_value max_input_vars 3000 | max_input_vars |
| показ ошибок на странице — только на время поиска ошибки | php_flag display_errors on | display_errors |
| часовой пояс | php_value date.timezone Europe/Moscow | date.timezone |
Настройки allow_url_fopen, file_uploads и upload_tmp_dir через .htaccess не меняются: строка с ними не даёт ни ошибки, ни результата. Их задают в php.ini или в настройках сервера, а disable_functions и expose_php — только в php.ini (какой файл править). В каком режиме можно менять каждую настройку, видно в списке настроек PHP: в .htaccess работают INI_ALL и INI_PERDIR.
php_admin_value в .htaccess не работает
Строки php_admin_value и php_admin_flag в .htaccess дают ошибку 500 даже при AllowOverride All, а в журнале ошибок появляется запись со словами not allowed. Их пишут в файле настроек сайта Apache, и значение, заданное так, строка php_value из .htaccess уже не изменит.
Блок на случай смены PHP
Чтобы сайт не отвечал ошибкой 500, если PHP перестанет работать модулем Apache, строки заключают в блок IfModule:
<IfModule mod_php.c>
php_value memory_limit 256M
php_value upload_max_filesize 64M
</IfModule>mod_php.c — имя файла модуля в PHP 8. В старых примерах, в том числе в справке PHP, стоит mod_php5.c: с PHP 8 Apache такой блок пропустит, и строки в нём не сработают. Без модуля строки в блоке тоже молча не работают — проверяйте результат через phpinfo(), а при PHP-FPM задайте настройки файлом .user.ini (как).
Константы вроде E_ALL
В php.ini уровень ошибок задают константами: error_reporting = E_ALL. В .htaccess константы PHP ничего не значат и превращаются в 0 — так сказано в справке PHP. Поэтому для error_reporting в php_value пишут число. Какое число соответствует константе, видно в справке PHP о константах ошибок.
На хостинге
Работают ли строки php_value, зависит от того, как хостинг подключает PHP. Примеры таких строк есть в справке Спринтхоста, Beget и Timeweb — ссылки в источниках. Файл .htaccess правят в файловом менеджере панели хостинга — где лежит файл.
Если после строки сайт отвечает ошибкой 500, уберите её и проверьте, нет ли опечатки в имени настройки. Если и верная строка даёт ошибку, хостинг такие строки не принимает: поменяйте настройку в панели хостинга или спросите поддержку — настройки PHP на виртуальном хостинге.
На своём VPS
Команды вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне. Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — наберите пароль и нажмите Enter. Проверьте, подключён ли PHP к Apache модулем:
sudo apache2ctl -M | grep phpВ ответе должна быть строка с php — тогда строки php_value работают. Если ответ пустой, модуля PHP нет и php_value даст ошибку 500. Если при этом сайт на PHP работает, PHP подключён иначе, например через PHP-FPM: задайте настройки файлом .user.ini или в пуле — какой способ выбрать. Как поставить модуль PHP для Apache, написано в разделе PHP для Apache.
Если система ответила, что команды apache2ctl нет, Apache на сервере не установлен и .htaccess никто не читает — перенесите настройки по статье .htaccess в nginx.
Как подключён PHP, видно и в phpinfo(): в строке Server API модуль показан как Apache 2.0 Handler, а PHP-FPM — как FPM/FastCGI (подробнее).
Ещё Apache должен разрешать в .htaccess группу Options: так и есть, если для папки сайта стоит AllowOverride All, — как разрешить .htaccess.
Как проверить
- Создайте в той же папке, где лежит .htaccess, файл info-58213.php с одной строкой
<?php phpinfo();. На хостинге — в файловом менеджере панели, на своём VPS — по инструкции про phpinfo(). - Откройте в браузере адрес example.com/info-58213.php — вместо example.com ваш домен — и найдите имя настройки поиском по странице: Ctrl+F, на Mac — Cmd+F.
- В колонке Local Value должно стоять новое значение — что значат колонки.
- Сразу удалите файл: он показывает версию PHP и настройки сервера.
Ошибки и как их исправить
| Что видите | Что делать |
|---|---|
| ошибка 500 сразу после строки php_value | модуля PHP нет или в строке опечатка — когда это работает |
| в журнале запись со словами not allowed | на своём VPS разрешите группу Options — как разрешить .htaccess; строки php_admin_value и php_admin_flag уберите |
| ошибки нет, а значение старое | проверьте имя настройки и нет ли её среди тех, что меняют только в php.ini, — список; на хостинге значение могут задавать настройки сервера — спросите поддержку |
| большой файл всё равно не загружается | поднимите и post_max_size — почему |
| php_flag не включает настройку | напишите значение on или 1 |
| блок IfModule не срабатывает | в строке должно стоять mod_php.c; без модуля задайте настройки файлом .user.ini — как |
Источники
- Справка PHP: изменение настроек — php_value и php_flag работают с PHP-модулем Apache и при AllowOverride Options или All; php_flag — для настроек, которые включают и выключают; php_admin_value в .htaccess не пишут; константы PHP вне PHP превращаются в 0.
- Справка PHP: режимы настроек — INI_PERDIR и INI_ALL меняются в .htaccess, INI_SYSTEM — только в php.ini и настройках сервера.
- Справка PHP: список настроек — в каком режиме можно менять каждую настройку.
- Справка PHP: файлы .user.ini — работают при CGI и FastCGI, в том числе при PHP-FPM.
- Справка PHP: константы ошибок — числа для констант E_ALL, E_WARNING и других.
- Исходный код PHP 8.3.6: apache_config.c — php_flag включает настройку словом on или цифрой 1; php_admin_value — режим INI_SYSTEM; значение из вложенной папки заменяет значение верхней.
- Исходный код PHP 8.3.6: mod_php.c — модуль называется php_module, файл — mod_php.c.
- Исходный код PHP 8.3.6: sapi_apache2.c — строка Apache 2.0 Handler в phpinfo().
- Исходный код Apache 2.4.58: config.c — тексты Invalid command … и … not allowed here; ошибка в .htaccess даёт ответ 500, нечитаемый .htaccess — ответ 403 и запись AH00529.
- Документация Apache: IfModule — строки внутри блока выполняются, только если модуль загружен, иначе Apache их пропускает; блок можно писать в .htaccess.
- Спринтхост: файл .htaccess — примеры php_value для memory_limit, max_execution_time, upload_max_filesize и post_max_size.
- Beget: файл .htaccess — примеры строк php_value и php_flag.
- Timeweb: создание и настройка .htaccess — пример строки php_value default_charset.
Сверено 15 октября 2026 года.
Что почитать дальше
- Настройки PHPкакие бывают и где их менять.
- Настройки PHP для одного сайтапул PHP-FPM и файл .user.ini.
- phpinfo()как посмотреть настройки PHP сайта.
- Файл .htaccessчто это, где лежит и как не сломать сайт.