Каковы различия между system (), exec () и shell_exec () в PHP?

Можно запустить внешнюю команду тремя функциями PHP из

system(); exec(); shell_exec(); 

но в чем их отличия? Несмотря на их конкретные применения, в большинстве случаев их можно использовать одинаково. Мне любопытно узнать, какой из них предпочтительнее, когда они могут быть одинаково использованы. Например, для распаковки файла или сжатия папки (с помощью команды tar), какой из них предпочтительнее (возможно, с точки зрения производительности)?

ОБНОВЛЕНИЕ: В другом вопросе я нашел очень полезную ссылку, описывающую различные аспекты этих функций. Я разделяю ссылку здесь, поскольку другие могут использовать, чтобы лучше понять проблемы безопасности и другие аспекты.

exec – выполнить внешнюю программу

system – выполнить внешнюю программу и отобразить вывод

shell_exec – выполнить команду через оболочку и вернуть полный вывод в виде строки

поэтому, если вам не нужен вывод, я бы пошел с exec.

Дальнейшие подробности: