Ошибка shell_exec() has been disabled for security reasons возникает, когда функция PHP shell_exec отключена по соображениям безопасности. Некоторые хостинг-провайдеры ограничивают её использование для предотвращения уязвимостей удаленного выполнения кода.
Что за ошибка shell_exec()
Функция shell_exec() используется для выполнения команд оболочки (shell commands) из PHP-скриптов. Типичные случаи использования:
- Запуск внешних утилит и скриптов
- Автоматизация системных задач
- Взаимодействие с серверными приложениями
- Обработка файлов через консольные утилиты
Check If shell_exec Is Disabled
Выполните эту команду, чтобы получить список отключенных функций PHP:
Ожидаемый вывод (если shell_exec отключена):
Если shell_exec появляется в списке, PHP блокирует эту функцию.
Enable shell_exec() in php.ini
1. Найдите файл php.ini
Выполните команду:
Пример вывода:
Ваш файл php.ini может находиться в разных расположениях:
- Для Apache: /etc/php/8.1/apache2/php.ini
- Для Nginx с PHP-FPM: /etc/php/8.1/fpm/php.ini
- Для CLI (командная строка): /etc/php/8.1/cli/php.ini
2. Отредактируйте php.ini
Откройте файл в текстовом редакторе:
Найдите эту строку:
Удалите shell_exec из списка:
Сохраните и выйдите (CTRL + X, затем Y, затем Enter).
3. Перезапустите Apache или PHP-FPM
Для Apache:
Для Nginx с PHP-FPM:
sudo systemctl restart nginx
Теперь shell_exec() должна работать!
Verify That shell_exec() Is Enabled
Выполните проверку:
Ожидаемый вывод (если shell_exec() включена):
Если shell_exec отсутствует в списке, функция включена!
Alternative: Enable shell_exec() in .user.ini (Shared Hosting)
Если у вас нет root-доступа (например, на shared хостинге), попробуйте добавить следующее в файл .user.ini в корневой папке вашего сайта:
Это снимает все ограничения, но работает только если ваш хостинг-провайдер разрешает переопределения через .user.ini.
Troubleshooting
| Проблема | Решение |
|---|---|
| Все еще получаю ошибку shell_exec() | Убедитесь, что вы редактировали правильный файл php.ini (cli vs apache2 vs fpm). Проверьте конфигурацию для вашего веб-сервера. |
| Shared hosting не разрешает изменения | Свяжитесь с вашим хостинг-провайдером и запросите включение shell_exec. Объясните, для каких конкретных задач она необходима. |
| Веб-сервер не перезапускается | Используйте sudo systemctl restart php8.1-fpm apache2 для одновременного перезапуска PHP и Apache. |
| Функция включена, но не работает | Проверьте, что у PHP есть права на выполнение команд. Также проверьте конфигурацию безопасного режима (safe_mode, если используется). |
Summary
| Задача | Команда/Действие |
|---|---|
Проверить, отключена ли shell_exec() |
php -r "echo ini_get('disable_functions');" |
| Найти файл php.ini | php --ini |
Включить shell_exec() в php.ini |
Удалить shell_exec из disable_functions |
| Перезапустить сервер | sudo systemctl restart apache2 или php-fpm |
| Проверить исправление | Выполнить php -r "echo ini_get('disable_functions');" |
Теперь shell_exec() должна быть включена и работать корректно!


