Справочник

php_value и php_flag в .htaccess: как поменять настройки PHP

Строки php_value и php_flag в .htaccess меняют настройки PHP для папки сайта и вложенных папок. На своём сервере с Apache они работают, когда PHP подключён к Apache модулем, а на хостинге — если об этом сказано в его справке. Если Apache этих строк не знает, сайт отвечает ошибкой 500: тогда настройки меняют файлом .user.ini или в панели хостинга.

≈ 9 мин чтения
Содержание 13

Что сделать прямо сейчас

  1. Перед правкой сохраните копию файла .htaccess к себе на компьютер: если что-то пойдёт не так, её можно будет вернуть.
  2. Узнайте, работают ли строки php_value у вас: на хостинге или на своём VPS.
  3. Впишите строку в .htaccess в корневой папке сайта ([где лежит файл](/spravochnik/fajl-htaccess/#где-лежит-файл)) — как записывать. Сохраните файл и сразу откройте сайт. Если появилась ошибка 500, уберите добавленные строки — сайт заработает как раньше.
  4. Проверьте новое значение через 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 off

php_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 256Mmemory_limit
размер загружаемого файлаphp_value upload_max_filesize 64Mupload_max_filesize
размер всего запроса — больше размера файлаphp_value post_max_size 80Mпочему больше
время работы скрипта в секундахphp_value max_execution_time 300Maximum execution time
число полей в формеphp_value max_input_vars 3000max_input_vars
показ ошибок на странице — только на время поиска ошибкиphp_flag display_errors ondisplay_errors
часовой поясphp_value date.timezone Europe/Moscowdate.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.

Как проверить

  1. Создайте в той же папке, где лежит .htaccess, файл info-58213.php с одной строкой <?php phpinfo();. На хостинге — в файловом менеджере панели, на своём VPS — по инструкции про phpinfo().
  2. Откройте в браузере адрес example.com/info-58213.php — вместо example.com ваш домен — и найдите имя настройки поиском по странице: Ctrl+F, на Mac — Cmd+F.
  3. В колонке Local Value должно стоять новое значение — что значат колонки.
  4. Сразу удалите файл: он показывает версию 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 — как

Источники

Сверено 15 октября 2026 года.

Что почитать дальше