Maison > Article > développement back-end > À propos de la façon d'utiliser exec, system et d'autres fonctions pour appeler des commandes système en PHP
Cet article présente principalement la méthode d'utilisation des fonctions exec, system et autres pour appeler des commandes système en PHP. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer
. PHP en tant que langage de script côté serveur, il est entièrement capable d'effectuer des tâches telles que l'écriture de pages Web dynamiques simples ou complexes. Mais les choses ne sont pas toujours ainsi. Parfois, pour mettre en œuvre une certaine fonction, vous devez recourir à des programmes (ou commandes) externes du système d'exploitation. De cette façon, vous pouvez obtenir deux fois le résultat avec la moitié de l'effort.
Les fonctions intégrées de PHP exec et system peuvent être utilisées. Appelez des commandes système (commandes shell), et bien sûr passthru, escapeshellcmd et d'autres fonctions.
Dans de nombreux cas, l'utilisation des fonctions exec, system et autres de PHP pour appeler des commandes système peut nous aider à terminer notre travail mieux et plus rapidement. Par exemple, exec m'a beaucoup aidé lorsque je traitais par lots des fichiers .rar il y a deux jours.
Aujourd'hui, je vais trier les fonctions du système d'appel couramment utilisées et partager mon expérience avec tout le monde.
Remarque : Si vous souhaitez utiliser ces deux fonctions, le mode sans échec dans php.ini doit être désactivé, sinon php ne vous permettra pas d'appeler des commandes système pour des raisons de sécurité.
Regardez d'abord l'explication de ces deux fonctions dans le manuel PHP :
exec --- Exécuter des programmes externes
Syntaxe : string exec ( string command [, array &output [, int &return_var]] )
Explication :
exec() exécute la commande donnée, mais elle ne produit rien, elle prend simplement la commande La dernière La ligne est renvoyée dans le résultat. Si vous devez exécuter une commande et obtenir toutes les données de la commande, vous pouvez utiliser la fonction passthru().
Si le tableau d'arguments est donné, le tableau spécifié sera rempli avec chaque ligne sortie par la commande Remarque : Si le tableau contient déjà certains éléments, exec() l'ajoutera au tableau plus tard, si. vous ne voulez pas que cette fonction ajoute des éléments, vous pouvez appeler unset() avant de passer le tableau à exec().
Si les paramètres array et return_var sont donnés, la commande status retournée à l'exécution sera écrite dans cette variable.
Remarque : Si vous autorisez la transmission des données provenant des entrées de l'utilisateur à cette fonction, vous devez alors utiliser escapeshellcmd() pour vous assurer que l'utilisateur ne peut pas tromper le système en lui faisant exécuter des commandes arbitraires.
Remarque : Si vous utilisez cette fonction pour démarrer un programme et que vous souhaitez le laisser s'exécuter en arrière-plan, vous devez vous assurer que la sortie du programme est redirigée vers un fichier ou un autre flux de données de sortie, sinon PHP se bloquera jusqu'à la fin de l'exécution du programme.
system --- Exécuter des programmes externes et afficher la sortie
Syntaxe : string system ( string command [, int &return_var] )
Description :
system() exécute la commande donnée et affiche le résultat. Si le paramètre return_var est donné, le code d'état de la commande exécutée sera écrit dans cette variable.
Remarque : Si vous autorisez la transmission des données provenant des entrées de l'utilisateur à cette fonction, vous devez alors utiliser escapeshellcmd() pour vous assurer que l'utilisateur ne peut pas tromper le système en lui faisant exécuter des commandes arbitraires.
Remarque : Si vous utilisez cette fonction pour démarrer un programme et que vous souhaitez le laisser s'exécuter en arrière-plan, vous devez vous assurer que la sortie du programme est redirigée vers un fichier ou un autre flux de données de sortie, sinon PHP se bloquera jusqu'à la fin de l'exécution du programme.
Si PHP s'exécute en tant que module serveur, system() tentera d'effacer automatiquement le tampon de sortie du serveur Web après la sortie de chaque ligne.
Renvoie la dernière ligne de la commande en cas de succès, false en cas d'échec.
Si vous devez exécuter une commande et obtenir toutes les données de la commande, vous pouvez utiliser la fonction passthru().
Ces deux éléments sont utilisés pour appeler des commandes du shell système,
La différence :
exec peut renvoyer tous les résultats d'exécution à la fonction $output (array), $status est le statut d'exécution, 0 est le succès, 1 est l'échec
Systerm n'a pas besoin de fournir la fonction $output, il renvoie directement le résultat De même, $return_var est le code d'état de l'exécution, 0 est le succès, 1 est un échec
exemple d'exécution :
<?php $a = exec("dir",$out,$status); print_r($a); print_r($out); print_r($status); ?>
exemple de système :
<?php $a = system("dir",$out); print_r($a); print_r($out); ?>
system, exce, passthru différence
system() génère et renvoie la dernière ligne de résultats du shell.
exec() ne génère pas de résultats et renvoie la dernière ligne de résultats du shell. Tous les résultats peuvent être enregistrés dans un tableau renvoyé.
passthru() appelle uniquement la commande et affiche le résultat de l'exécution de la commande directement sur le périphérique de sortie standard tel quel.
Même point : vous pouvez obtenir le code d'état de l'exécution de la commande
Ce qui précède est l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'apprentissage de chacun. Pour plus de contenu connexe, veuillez prêter attention à. le site PHP chinois !
Recommandations associées :
Analyse de la fonction filter_var() et de la fonction Filter en PHP
Analyse de la vulnérabilité de substitution str_replace en php
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!