Maison > Article > développement back-end > Que dois-je faire si system() en php ne renvoie pas de sortie ?
Solution au problème selon lequel system() en php ne renvoie pas de sortie : redirigez l'erreur standard vers la sortie standard en ajoutant [2 >& 1] à la commande, par exemple [exec('some_command --option 2> & 1', $output, $ret);].
L'environnement d'exploitation de cet article : système windows10, php 7, ordinateur thinkpad t480.
Récemment, alors que je travaillais, j'ai découvert accidentellement que l'exécution de commandes courantes comme 'ls', exec() peut fonctionner correctement, par exemple :
exec('ls',$输出,$ retval); var_dump($ output,$ retval); // $ output包含文件名数组,retval === 0
Mais lorsque j'essaie d'exécuter un autre programme, je ne parviens pas à obtenir le résultat , comme suit :
exec('some_command --a_parameter',$ output ,$ retval); var_dump($ output,$ retval); // $ output包含一个空数组,结束$ retval === 0
Lors de l'exécution de la commande directement depuis la ligne de commande, certaines lignes seront imprimées. Je sais que l'exécution de la commande a réussi et je peux voir les résultats (quelques mises à jour de fichiers, ajout de données, etc.), mais Je ne peux pas voir le résultat.
La fonction exec() ne capturera que la sortie standard. Je ne suis pas sûr que l'erreur standard soit toujours envoyée au journal des erreurs Apache, mais cela semble possible.
Si vous n'avez pas besoin d'utiliser un système Unix, nous pouvons en fait rediriger l'erreur standard vers la sortie standard en ajoutant 2>& 1 à la commande, afin que le problème puisse être résolu, par exemple :
exec('some_command --option 2>& 1',$ output,$ ret);
Recommandé apprentissage : Formation 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!