PHP exec() et system() vs passthru()
Quelles sont les différences?
Est là une situation spécifique ou la raison pour laquelle chaque fonction? Si oui, pouvez-vous donner quelques exemples de ces situations?
PHP.net dit qu'ils sont utilisés pour exécuter des programmes externes. voir la référence
Dans les exemples que je vois, je ne vois pas de différence flagrante.
Si j'essayais simplement d'exécuter un script (bash ou python), qui fonctionnent recommandez-vous de moi?
- Il y a aussi
proc_open()
etpopen()
, qui permettent à un plus haut degré de contrôle sur le processus générés dynamiquement.
Vous devez vous connecter pour publier un commentaire.
Ils ont des objectifs légèrement différents.
exec()
est pour appeler un système de commande, et peut-être traiter avec la sortie vous-même.system()
est pour l'exécution d'un système de commande et immédiatement affichage de la sortie - sans doute le texte.passthru()
est pour l'exécution d'un système de commande qui vous souhaitez le retour premières de - sans doute quelque chose de binaire.Soit, je vous suggère de ne pas utiliser l'un d'eux. Ils produisent tous très portables code.
dir
, par exemple, fonctionne sur tous les Systèmes d'exploitation. Il n'est pas non portables il faut juste un peu d'effort pour le rendre portable. -1 pour cette stupide idée.exec
,system
,passthru
. Le code PHP est tributaire de l'environnement, il s'exécute, et de nombreux bugs de sécurité sont dues à ne pas avoir cela en considération. Voici un petit exemple: stackoverflow.com/questions/3003145/...Élaborées à partir de http://php.net/ && Chipmunkninja:
La précédente répondu semblaient tous être un peu confuse ou incomplète, voici donc un tableau des différences...
Divers autres choses à connaître:
include
et amis- Il vraiment tout se résume à la façon dont vous souhaitez gérer sortie de la commande de retour et si vous souhaitez que votre script PHP, pour attendre que le destinataire de l'appel du programme ou pas.
exec
exécute une commande et passe de sortie de l'appelant (ou le renvoie dans une variable optionnelle).passthru
est similaire à laexec()
fonction qu'il exécute une commande . Cette fonction devrait être utilisée à la place deexec()
ousystem()
lors de la sortie de la commande Unix est binaire des données qui doivent être transmises directement au navigateur.system
exécute un programme externe et affiche le résultat, mais seule la dernière ligne.Si vous avez besoin d'exécuter une commande et de disposer de toutes les données de la commande passée directement à l'arrière, sans aucune interférence, utilisez le
passthru()
fonction.Si vous êtes en cours d'exécution de votre script PHP en ligne de commande,
passthru()
a un grand avantage. Il vous permettra d'exécuter des scripts/programmes tels quevim
,dialog
, etc, de laisser ces programmes, de la poignée de contrôle et de retourner à votre script, seulement quand ils sont fait.Si vous utilisez
system()
ouexec()
pour exécuter ces scripts/programmes, il ne fonctionnerait tout simplement pas.Gotcha: Pour une raison quelconque, vous ne pouvez pas exécuter
less
avecpassthru()
en PHP.