разделы:

Как в aaPanel включить функцию PHP shell_exec()

В некоторых случаях, пусть и не всегда, при работе с PHP (скрипты просто или сайт), может возникнуть необходимость в такой функции как, shell_exec()

В случае когда функция не включена, мы получим ошибку:

Fatal error: Uncaught Error: Call to undefined function shell_exec() in /www/user/data.php:xx Stack trace: #0 {main} thrown in /www/user/data.php on line xx

Для использования таких функций как shell_exec(), exec() или system(), в зависимости от текущей необходимости, они должны быть включены в файле php.ini.

В настоящее время в большинстве версиях PHP, в связи с опасностью использования, эти функции выключены в директиве «disable_functions» конфигурации php.ini

Важно! Функция shell_exec — критично повышает уязвимость вашего сервера!

Подробное описание функции на php.net

Включить необходимую функцию PHP, в панели aaPanel, не составит особого труда.

Авторизовываемся в панели и переходим в раздел App Store

Открываем в aaPanel вкладку App Store

В списке установленных плагинов и дополнений находим PHP нужной вам версии.

В правой части строки, выбранной вами версии PHP, нажимаем на ссылку «Settings»

Выбираем версию PHP и нажимаем на ссылку Settings

Откроется окно настроек, в котором мы переходим на вкладку «Configuration file».

Открываем вкладку Configuration file, для настройки PHP

Откроется текущий конфигурационный файл, выбранной версии PHP. Используя поиск браузера по странице, находим строку начинающуюся с «disable_functions = … »

В полном виде она выглядит так:

disable_functions = passthru,exec,system,putenv,chroot,chgrp,chown,popen,proc_open,shell_exec, pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv

Находим строку disable_functions

Находим в этой строке нужное нам «shell_exec,» и вырезаем вместе с запятой в конце.

В качестве совета, рекомендую вырезанную функцию из строки, вставить выше в закомментированный текст, который начинается с символа «;», чтобы функция была поближе, а в случае необходимости, вы могли без ошибок и быстро вернуть как было.

Удаляем из disable_functions shell_exec

Нажимаем ниже на кнопку «Save» и дожидаемся подтверждения сохранения настроек.

Применяем настройки

Следующим шагом, переходим в этом же окне на вкладку «Service». Нажимаем на кнопку «Restart», это необходимо для принудительного перезапуска службы PHP и применения всех внесенных изменений в конфигурационный файл.

Перезапускаем службу PHP в aaPanel

Появится запрос подтверждения, где мы жнем на «Confirm».

Перезапускаем службу PHP в aaPanel

В случае отсутствия проблем при применении настроек и перезапуска службы, появится сообщение об успешном перезапуске службы PHP.

Перезапускаем службу PHP в aaPanel

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


З.Ы
У меня проблема с функцией shell_exec возникла, когда возился со скриптом, для отображения в браузере кол-во ядер сервера и вывод температуры по каждому из них в реальном времени. На одном сервере, вроде все работало и на какое-то время все было забыто и оставлено, мол зачем трогать работающее. Но недавно перенес скрипт на малинку, работать перестало. Пришлось вспоминать, как это лечится. Подумал пусть будет такая вот памятка, как для себя, так и для тех, кто тоже столкнется с такой необходимостью.