Функция PHP shell_exec: выполнение внешней команды
Практически все языки программирования включают в себя возможность запуска внешнего кода или команд оболочки операционной системы. Наличие такой возможности считается правилом приличия и полной функциональности языка. Использование такой возможности считается угрозой безопасности и отсутствием полной функциональности приложения, написанного на этом языке.
PHP предоставляет программисту возможность запустить внешнюю команду и обеспечивает передачу результатов запуска в переменную в виде текста.
Операционная среда и внешняя команда
Выбор не особенно велик, но разнообразие вариантов может поставить в тупик. Если сервер, на котором запущен PHP, находится под управлением Windows, то особенных непредвиденных ситуаций не будет. В семействе линуксоидов возможны различные неопределенности.
В любом случае запуск внешнего кода - это угроза. Потому применение возможности PHP shell_exec() - это продуманное и взвешенное решение.
Обычно целью применения такой возможности является периодический запуск внешнего приложения, которое собирает информацию и перемещает ее в папки веб-ресурса. Часто используется запуск внешнего кода для передачи статистики работы сайта, финансового отчета и др.
Вариантов, когда управление с веб-ресурса требует «внешнего содействия», очень много, но предпочтительно, когда любой контакт с «внешней средой» исполняется «собственными силами» без использования PHP shell_exec().
Синтаксис и логика использования
Вызов внешнего кода выполняется путем присваивания результата вызова функции shell_exec() некоторой переменной.
В данном случае apache & PHP установлены на рабочем компьютере с Windows 10. Сразу обнаружились проблемы с кириллицей и очевидно несоответствие потоков вывода команды операционной системе обычному потоку, воспринимаемого браузером.
Для корректного отображения вывода потребуется анализировать работу shell_exec(). В PHP примеры тестирования должны быть максимально жесткими для достижения безопасного использования.
Любая операционная система допускает формирование командной строки, когда в одной строчке записывается сразу несколько команд. Функция shell_exec допускает использование такой командной строки.
Во всех случаях применения функции следует предусмотреть набор тестовых примеров, на котором проверить безопасность использования обращения к операционной системе.