В чем различия?
Есть ли конкретная ситуация или причина для каждой функции? Если да, можете ли вы привести примеры таких ситуаций?
PHP.net говорит, что они используются для выполнения внешних программ. см. ссылку. Из примеров, которые я вижу, я не вижу никакой очевидной разницы.
Если бы я просто запустил скрипт (bash или python), какую функцию вы бы порекомендовали мне использовать?
proc_open()
и тоpopen()
, и другое, что позволяет более высокую степень контроля над порожденным процессом.Ответы:
У них немного разные цели.
exec()
предназначен для вызова системной команды и, возможно, работы с выводом самостоятельно.system()
предназначен для выполнения системной команды и немедленного отображения выходных данных - предположительно, текста.passthru()
предназначен для выполнения системной команды, от которой вы хотите получить сырой возврат - предположительно что-то двоичное.Несмотря на это, я предлагаю вам не использовать ни один из них. Все они производят крайне непереносимый код.
источник
izkata@izein:~$ dir -bash: dir: command not found
- FreeBSDexec
,system
,passthru
. PHP-код зависит от среды, в которой он работает, и многие ошибки безопасности связаны с тем, что это не учитывается. Вот быстрый пример: stackoverflow.com/questions/3003145/…Как взято из http://php.net/ && Chipmunkninja :
источник
Предыдущие ответы кажутся немного запутанными или неполными, поэтому вот таблица различий ...
Другие разные вещи, о которых нужно знать:
источник
include
и друзьяНа самом деле все сводится к тому, как вы хотите обработать вывод, который может вернуть команда, и хотите ли вы, чтобы ваш PHP-скрипт ожидал завершения программы вызываемого абонента, или нет.
exec
выполняет команду и передает вывод вызывающей стороне (или возвращает ее в необязательной переменной).passthru
похож наexec()
функцию в том, что он выполняет команду. Эта функция должна использоваться вместоexec()
илиsystem()
когда выходные данные команды Unix представляют собой двоичные данные, которые необходимо передавать непосредственно обратно в браузер.system
выполняет внешнюю программу и отображает вывод, но только последнюю строку.Если вам нужно выполнить команду и передать все данные из команды обратно без каких-либо помех, используйте
passthru()
функцию.источник
Если вы запускаете свой PHP-скрипт из командной строки,
passthru()
есть одно большое преимущество. Это позволит вам выполнять скрипты / программы, такие какvim
,dialog
и т. Д., Позволяя этим программам управлять и возвращаться к вашему сценарию только после завершения.Если вы используете
system()
илиexec()
для выполнения этих скриптов / программ, это просто не будет работать.Понял: По какой - то причине, вы не можете выполнить
less
сpassthru()
в PHP.источник