Question

J'ai rencontré récemment deux situations dans lesquelles j'ai choisi d'utiliser la ligne de commande pour faire quelque chose plutôt que la bibliothèque PHP. Par exemple, en PHP, procédez comme suit:

`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 est l'utilisation de l'interface de ligne de commande d'ImageMagick, au lieu de l'interface PHP.

Certaines personnes à qui j'ai parlé pensent qu'il est préférable d'utiliser les bibliothèques. Certains disent que mieux est, plus vite, d’autres, plus sûr, etc.

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

Je connais un avantage, c’est que je n’ai qu’une ligne de code au lieu de 5.

Était-ce utile?

La solution

J'utiliserais toujours les bibliothèques:

  1. Pas besoin de bifurquer deux fois (une fois pour le sous-shell et un autre pour le programme que vous exécutez) - donc plus rapide

  2. Inutile de vous soucier de l'échappement 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-la quand vous en avez besoin.

Autres conseils

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 transmettez au programme.

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

Bien que votre travail puisse fonctionner correctement à présent, cela ne fonctionnera pas une fois que votre application aura plusieurs milliers d'utilisateurs simultanés. (Vous planifiez cela, n'est-ce pas? :))

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

Chaque fois que vous passez un appel de ce type en ligne de commande, PHP doit créer un processus (deux en fait, le shell puis la commande à 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. Réfléchissez à ce qui se passe si vous (ou votre processus de démarrage) essayez de démarrer plusieurs programmes en même temps sur votre ordinateur.

Lorsque vous utilisez une bibliothèque, aucun processus ne doit être créé. PHP lui-même fait le travail que ces autres applications feraient.

Cela dit, je connais de nombreuses applications Web de production qui permettent d’appeler des applications en ligne de commande qui ne sont pas disponibles via les bibliothèques PHP. S'il s'agit d'une partie d'une application à faible trafic, ou d'une page qui n'est pas fréquemment vue, vous pourriez vous en sortir, mais vous vous achetez un monde de blessures quand il s'agit de passer à l'échelle.

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

;rm -rf /

Etre injecté dans votre commande, ce qui serait mauvais (rm -rf / supprimera tout votre système de fichiers). Oui, vous pouvez échapper à vos variables d’entrée pour gérer cela, mais demandez à tout développeur PHP expérimenté comment les requêtes SQL d’échange manuel ont fonctionné.

Donc, en bref, vous pouvez probablement vous en tirer, mais ce n’est pas une pratique recommandée et vous vous payez une lourde charge à l’avenir lorsque la s --- frappe le fan.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top