2009-03-16 11 views
2

J'ai récemment rencontré deux situations où j'ai choisi d'utiliser la ligne de commande pour faire quelque chose plutôt que la bibliothèque PHP. Par exemple, en PHP faire ceci:Bibliothèque PHP ou ligne de commande?

 
`curl http://someplace.com` 

au lieu de ceci:

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

L'autre situation utilise l'interface de ligne de commande de ImageMagick, au lieu de l'interface PHP.

Certaines personnes à qui j'ai parlé pensent que l'utilisation des bibliothèques est meilleure. Certains disent que le meilleur est plus rapide, d'autres disent plus sûr, etc.

Quelle est votre opinion? Quels sont les avantages à utiliser l'un sur l'autre?

Je sais que l'un des avantages est que je n'ai qu'une seule ligne de code au lieu de 5.

Répondre

5

je toujours utiliser les bibliothèques:

  1. Pas besoin de fourche deux fois (une fois pour le sous-shell, et un autre pour le programme que vous utilisez) - donc plus rapide

  2. Pas besoin de se soucier de s'échapper des arguments de ligne de commande, ce qui contribue à la sécurité

Si le nombre de lignes de code vous inquiète, écrivez ces 5 lignes une fois dans une fonction, puis appelez cette fonction lorsque vous en avez besoin.

2

L'exécution d'applications est à la fois une opération potentiellement dangereuse et presque toujours coûteuse. Vous devez notamment échapper tous les paramètres que vous passez au programme, entre autres choses.

Le coût de création d'un nouveau processus est également bien supérieur à l'appel d'une simple fonction dans un existant.

Alors que ce que vous faites peut bien fonctionner maintenant, il ne sera pas une fois que votre application a plusieurs milliers d'utilisateurs simultanés. :) (

1

Le compromis entre l'utilisation d'un appel de ligne de commande et l'utilisation d'une bibliothèque correspond à la vitesse de votre application et à la vitesse de l'ordinateur sur lequel votre application s'exécute.

Chaque fois que vous lancez un appel en ligne de commande, PHP doit lancer un processus (deux en fait, le shell et la commande que vous voulez exécuter). Cela signifie que votre ordinateur doit démarrer une autre application. C'est une chose coûteuse qui consomme beaucoup de ressources système. Pensez à ce qui se passe si vous (ou votre processus de démarrage) essayez de démarrer trop de programmes à la fois sur votre ordinateur. Lorsque vous utilisez une bibliothèque, aucun processus ne doit être bifurqué. PHP lui-même fait le travail que ces autres applications feraient. Cela dit, j'ai connu beaucoup d'applications Web de production qui permettent de passer des appels aux applications en ligne de commande qui ne sont pas disponibles via les bibliothèques PHP. Si c'est une partie à faible trafic d'une application, ou une page qui ne frappe pas si souvent, vous pourriez être en mesure de s'en tirer, mais vous vous achetez un monde de mal quand vient le temps de l'échelle.

Il y a aussi la sécurité à considérer.Lorsque vous exécutez une commande à partir de PHP comme ça, si vous utilisez des variables pour construire la chaîne de commande, vous risquez quelque chose comme

;rm -rf/

injecté dans votre commande, ce qui serait mauvais (rm -rf/sera effacez tout votre système de fichiers). Oui, vous pouvez échapper à vos variables d'entrée pour gérer cela, mais demandez à n'importe quel développeur PHP expérimenté comment les requêtes SQL d'échappement à la main ont fonctionné. Donc, en bref, vous pouvez probablement vous en sortir, mais ce n'est pas une bonne pratique et vous vous achetez une charge de douleur à l'avenir quand le s --- frappe le ventilateur.