322 votes

PHP exec() et system() vs passthru()

Quelles sont les différence? Est-il une situation spécifique ou la raison pour laquelle chaque fonction? Si oui, pouvez-vous nous donner quelques exemples de ces situations?

PHP.net dit qu'ils sont utilisés pour exécuter le programme externe. À partir d'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 est la fonction-vous me recommander?

205voto

Kalium Points 2895

Ils ont des objectifs légèrement différents.

exec() est pour l'appel d'une commande système, 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.

Peu importe, je vous suggère de ne pas utiliser l'un d'eux. Ils produisent tous très portables code.

136voto

Dinesh Saini Points 470

La Fonction system()

Le système de fonction en PHP qui prend un argument de type chaîne avec la commande à exécuter ainsi que tous les arguments que vous souhaitez transmis à la commande. Cette fonction exécute la commande spécifiée, et les décharges de tout texte qui en résulte pour le flux de sortie (la sortie HTTP à un serveur web de situation, ou de la console si vous utilisez PHP comme un outil de ligne de commande). Le retour de cette fonction est la dernière ligne de sortie de ce programme, s'il émet de la sortie de texte.

La Fonction exec()

La fonction du système est très utile et puissant, mais un des plus gros problèmes avec elle, c'est que tout le texte du programme va directement dans le flux de sortie. Il y aura des situations où vous pourriez, comme pour formater le texte et l'afficher dans certains manière différente, ou ne pas s'afficher du tout.

Pour cela, la fonction exec de PHP est parfaitement adapté. Au lieu de automatiquement dumping tout le texte généré par le programme en cours d'exécution pour le flux de sortie, il vous donne la possibilité de mettre ce texte dans un tableau retourné dans le second paramètre de la fonction:

Le shell_exec() la Fonction

La plupart des programmes que nous avons mené jusqu'à présent ont été, plus ou moins, réel programs1. Cependant, l'environnement dans lequel les utilisateurs Windows et Unix exploiter est en fait beaucoup plus riche que cela. Les utilisateurs de Windows ont la possibilité d'utiliser l'Invite de Commande Windows programme, cmd.exe Ce programme est connu comme un shell de commande.

Le passthru (), Fonction

Un fascinant fonction PHP fournit semblables à celles que nous avons vu jusqu'à présent est le genre de fonction. Cette fonction, comme les autres, exécute le programme vous le dire. Cependant, il procède ensuite à envoyer immédiatement à la sortie brute de ce programme pour le flux de sortie avec PHP qui est actuellement en train de travailler (c'est à dire soit HTTP à un serveur web de scénario, ou de l'environnement dans une version ligne de commande de PHP).

22voto

Cody Caughlan Points 18780

Il a 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).

'genre' est similaire à la fonction exec() en ce qu'il exécute une commande . Cette fonction devrait être utilisée à la place de exec() ou system() lors de la sortie de la commande Unix est binaire des données qui doivent être transmises directement au navigateur.

'système' 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.

20voto

Gregor Brandt Points 5645

Essayez ces explications

http://chipmunkninja.com

10voto

Matt Points 1427

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 que vim, dialogue, etc, de laisser ces programmes, de la poignée de contrôle et de retourner à votre script, seulement quand ils sont fait.

Si vous utiliser system() ou exec() pour exécuter ces scripts/programmes, il ne fonctionnerait tout simplement pas.

Gotcha: Pour une raison quelconque, vous ne pouvez pas exécuter de moins en moins avec passthru() en PHP.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X