Pergunta

Eu tenho que correr em duas situações ultimamente onde eu escolhi para usar a linha de comando para fazer algo mais do que a biblioteca PHP. Por exemplo, em PHP fazer isso:

`curl http://someplace.com`

em vez disso:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);

A outra situação é usando a interface de linha de comando do ImageMagick, em vez da interface PHP.

Algumas pessoas que eu falei para pensar que usando as bibliotecas é melhor. Alguns dizem que é melhor mais rápido, outros dizem mais seguros, etc.

Qual é a sua opinião? Quais são os benefícios de usar um sobre o outro?

Eu sei que um benefício, é que eu só tenho uma linha de código em vez de 5.

Foi útil?

Solução

Eu sempre usar as bibliotecas:

  1. Não há necessidade de desembolsar duas vezes (uma vez para o sub-shell, e outro para o programa que está sendo executado) - daí mais rápido

  2. Não há necessidade de se preocupar com a escapar argumentos de linha de comando, o que ajuda a segurança

Se o número de linhas de código é uma preocupação, escrever essas 5 linhas de uma vez em uma função e, em seguida, chamar essa função quando você precisar dele.

Outras dicas

Executar aplicações é tanto um potencialmente perigosos e quase sempre uma operação dispendiosa. Você precisa escapar corretamente todos os parâmetros que você passa para o programa, entre outras coisas.

O custo de criar um novo processo também é muito acima chamar uma função simples em um já existente.

Enquanto o que você está fazendo pode funcionar bem agora, não vai uma vez que sua aplicação tem vários milhares de usuários simultâneos. (Você está planejando para isso, não é? :))

O trade off entre o uso de uma chamada de linha de comando e usando uma biblioteca é a velocidade de sua aplicação, e velocidade do computador o aplicativo está sendo executado.

Cada vez que você faz uma chamada de linha de comando assim, PHP tem de desembolsar um processo (dois, na verdade, a casca e, em seguida, o comando que você deseja executar). O que isto significa é, o computador tem de iniciar outra aplicação. Esta é uma coisas caras que come um monte de recursos do sistema. Pense sobre o que acontece se você (ou seu processo de inicialização) tentar iniciar muitos programas ao mesmo tempo no seu computador.

Quando você usa uma biblioteca, há processos têm de ser bifurcada. PHP em si está fazendo o trabalho dessas outras aplicações faria.

Dito isso, eu conheço um monte de aplicativos de produção da web que fugir com a fazer chamadas para aplicações de linha de comando que não estão disponíveis através de bibliotecas PHP. Se é uma parte de baixo tráfego de um aplicativo ou uma página que não começar a batida que, muitas vezes, você pode ser capaz de fugir com ele, mas você está comprando-se um mundo de dor quando chega a hora de escala.

Há também a segurança a considerar. Quando você executar um comando do PHP assim, se você estiver usando variáveis ??para construir a cadeia de comando, o risco de algo como

;rm -rf /

Sendo injetado em seu comando, o que seria ruim (rm-rf / excluirá seu sistema de arquivo inteiro). Sim, você pode escapar suas variáveis ??de entrada para lidar com isso, mas pergunte a qualquer desenvolvedor veterano PHP como consultas SQL fuga mão funcionou.

Então, em suma, você provavelmente pode fugir com ele, mas não é uma prática recomendada e você está comprando-se uma carga de dor no futuro, quando os s --- atinge o ventilador.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top