Знаете, что можно изменить параметры среды выполнения прямо в рантайме без перезапуска сервера и правки конфигов?
🔹 Зачем это нужно
— ini_set() меняет параметры для текущего запроса: удобно для скриптов с нестандартными требованиями к памяти или таймаутам.
— ini_get() покажет реальное значение, которое видит ваш процесс, а не то, что вы написали в конфиге три года назад.
— Мгновенно отвечает на вопрос «а почему memory_limit игнорируется?»
— Работает без доступа к серверу, рестартов и DevOps-тикетов.
🔹 Как использовать
Посмотреть реальное значение директивы:
echo ini_get('memory_limit'); // '128M'Переопределить на лету для тяжёлого импорта:
ini_set('memory_limit', '512M');
ini_set('max_execution_time', '300');Дамп всех активных настроек:
phpprint_r(ini_get_all());
Только настройки конкретного расширения:
phpprint_r(ini_get_all('session'));Проверить, откуда пришло значение — из php.ini, .htaccess или кода:
php$all = ini_get_all(null, true);
print_r($all['memory_limit']);
// ['global_value' => '128M', 'local_value' => '512M', 'access' => 7]
⚠️ Не все директивы можно менять через ini_set(), каждая имеет уровень доступа. Если ini_set() возвращает false — директива системная, её меняет только php.ini или конфиг пула php-fpm. Смотрите поле access в выводе ini_get_all(): 1 — можно из кода, 2 — только .htaccess/пул, 4 — только php.ini, 7 — везде.