Если переносимость на самом деле не является проблемой, потому что вы создаете решение компании, которое всегда будет на ваших собственных, полностью контролируемых серверах, я говорю, что выбирайте команды оболочки столько, сколько захотите. Нет никаких проблем с безопасностью, если вы выполняете правильную базовую очистку, используя escapeshellarg () и consorts.
В то же время, в моих проектах переносимость в большинстве случаев является проблемой, и когда это так, я стараюсь вообще не использовать команды оболочки - только когда что-то вообще не может быть сделано в PHP (например, декодирование / кодирование MP3). , ImageMagick, Video операции) или нет (т. Е. Решение на основе PHP слишком медленное) я буду использовать внешние команды.