Quelles sont les différences?
Existe-t-il une situation ou une raison spécifique pour 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 référence D'après les exemples que je vois, je ne vois aucune différence évidente.
Si je devais simplement exécuter un script (bash ou python), quelle fonction me recommandez-vous d'utiliser?
proc_open()
etpopen()
, les deux permettant un plus haut degré de contrôle sur le processus engendré.Réponses:
Ils ont des objectifs légèrement différents.
exec()
sert à appeler une commande système et peut-être à gérer vous-même la sortie.system()
sert à exécuter une commande système et à afficher immédiatement la sortie - vraisemblablement du texte.passthru()
sert à exécuter une commande système dont vous souhaitez le retour brut - probablement quelque chose de binaire.Quoi qu'il en soit, je vous suggère de ne pas en utiliser. Ils produisent tous du code hautement non transférable.
la source
izkata@izein:~$ dir -bash: dir: command not found
- FreeBSDexec
,system
,passthru
. Le code PHP dépend de l'environnement dans lequel il s'exécute, et de nombreux bogues de sécurité sont dus au fait de ne pas en tenir compte. Voici un exemple rapide: stackoverflow.com/questions/3003145/…Tiré de http://php.net/ && Chipmunkninja :
la source
Les réponses précédentes semblent toutes un peu confuses ou incomplètes, alors voici un tableau des différences ...
Autres choses diverses à savoir:
la source
include
et vos amisTout dépend vraiment de la façon dont vous voulez gérer la sortie que la commande peut retourner et si vous voulez que votre script PHP attende que le programme appelé se termine ou non.
exec
exécute une commande et transmet la sortie à l'appelant (ou la renvoie dans une variable facultative).passthru
est similaire à laexec()
fonction en ce sens qu'elle exécute une commande. Cette fonction doit être utilisée à la placeexec()
ousystem()
lorsque la sortie de la commande Unix est une donnée binaire qui doit être retransmise directement au navigateur.system
exécute un programme externe et affiche la sortie, mais uniquement la dernière ligne.Si vous devez exécuter une commande et que toutes les données de la commande soient retransmises directement sans aucune interférence, utilisez la
passthru()
fonction.la source
Si vous exécutez votre script PHP à partir de la ligne de commande, cela
passthru()
présente un gros avantage. Il vous permettra d' exécuter des scripts / programmes tels quevim
,dialog
, etc., laissant les programmes de contrôle de la poignée et revenir à votre script seulement quand ils sont faits.Si vous utilisez
system()
ouexec()
pour exécuter ces scripts / programmes, cela ne fonctionnera tout simplement pas.Gotcha: Pour une raison quelconque, vous ne pouvez pas exécuter
less
avecpassthru()
en PHP.la source