Quais são as diferenças?
Existe uma situação ou razão específica para cada função? Se sim, você pode dar alguns exemplos dessas situações?
O PHP.net diz que eles são usados para executar programas externos. veja referência Dos exemplos que vejo, não vejo diferença óbvia.
Se eu fosse simplesmente executar um script (bash ou python), qual função você recomendaria que eu usasse?
proc_open()
epopen()
, ambos os quais permitem um maior grau de controle sobre o processo gerado.Respostas:
Eles têm finalidades ligeiramente diferentes.
exec()
é para chamar um comando do sistema e, talvez, lidar com a saída você mesmo.system()
é para executar um comando do sistema e exibir imediatamente a saída - presumivelmente texto.passthru()
é para executar um comando do sistema do qual você deseja o retorno bruto - presumivelmente algo binário.Independentemente disso, sugiro que você não use nenhum deles. Todos eles produzem código altamente não portável.
fonte
izkata@izein:~$ dir -bash: dir: command not found
- FreeBSDexec
,system
,passthru
. O código PHP depende do ambiente em que é executado, e muitos erros de segurança devem-se a não levar isso em consideração. Aqui está um exemplo rápido: stackoverflow.com/questions/3003145/…Como extraído de http://php.net/ && Chipmunkninja :
fonte
As respostas anteriores parecem um pouco confusas ou incompletas, então aqui está uma tabela das diferenças ...
Outras coisas diversas a serem observadas:
fonte
include
e amigosNa verdade, tudo se resume a como você deseja lidar com a saída que o comando pode retornar e se deseja que seu script PHP aguarde o término do programa chamado ou não.
exec
executa um comando e passa a saída para o chamador (ou a retorna em uma variável opcional).passthru
é semelhante àexec()
função em que executa um comando. Esta função deve ser usada no lugar deexec()
ousystem()
quando a saída do comando Unix for dados binários que precisam ser passados diretamente de volta ao navegador.system
executa um programa externo e exibe a saída, mas apenas a última linha.Se você precisar executar um comando e receber todos os dados do comando diretamente de volta sem nenhuma interferência, use a
passthru()
funçãofonte
Se você estiver executando seu script PHP a partir da linha de comando, terá
passthru()
um grande benefício. Isso permitirá que você execute scripts / programas comovim
,dialog
etc, permitindo que esses programas controlem o controle e retornem ao seu script somente quando eles forem concluídos.Se você usar
system()
ouexec()
executar esses scripts / programas, simplesmente não funcionará.Gotcha: Por alguma razão, você não pode executar
less
compassthru()
no PHP.fonte