web-dev-qa-db-fra.com

php exec () n'exécute pas la commande

J'ai essayé d'utiliser exec() avec 'whoami' Pour vérifier si cela fonctionne et j'ai obtenu le résultat de

nt authority\system

Maintenant, je dois exécuter un fichier .exe Avec les paramètres de php via exec() function.

J'ai essayé ceci dans invite de commande et il exécute réellement le programme avec des paramètres donnés. Ceci est la commande exemple.


NOTE le fichier exe obtient 3 entrées (dossier, nom_fichier, rapport_fichier_nmae)

> ..\..\some_file.exe folder="C:\path_to_folder" param=1.xml report=2.xml

Mais quand j'exécute cette commande à partir du fichier php:

exec('..\..\some_file.exe folder="C:\path_to_folder" param=1.xml report=2.xml');

il ne se passe rien. C'est la première fois que j'utilise la fonction exec (), je ne connais donc pas ses détails. Qu'est-ce qui ne va pas?

J'ai essayé d'utiliser:

  • \\ Au lieu de \
  • escapeshellarg() dans le répertoire
  • ajouté "" autour des noms de dossier

Pas de chance

Addendum:

echo exec($command)  // echos < .... why?

ou

exec($command, $output);
print_r($output);        // Array()

J'ai même changé l'autorisation sur le fichier pour un contrôle total sur tous les utilisateurs. Si j'appelle le programme à partir de command Prompt, Je peux voir l'icône apparaître à côté de l'horloge pendant une seconde.

Mais le même appel de php n'appellera même pas le programme.

Éditer

Même exec('notepad.exe'); ne fonctionne pas. Quelque chose doit être fait avec php configurations peut-être?

33
Brian

J'ai déjà dit que j'étais nouveau à la fonction exec(). Après avoir creusé un peu plus, je suis tombé sur 2>&1 Qui doit être ajouté à la fin de la commande dans exec().

Merci @mattosmat Pour le signaler également dans les commentaires. Je ne l'ai pas essayé tout de suite car vous avez dit qu'il s'agissait d'une commande Linux, je suis sous Windows.

Donc, ce que j'ai découvert, la commande est en train de s'exécuter dans le back-end. C'est pourquoi je ne pouvais pas le voir fonctionner, ce que je m'attendais à voir.

Pour tous ceux qui ont eu un problème similaire, mon conseil est d'utiliser cette commande. Il va signaler toutes les erreurs et aussi vous donner des infos/détails sur l'exécution.

exec('some_command 2>&1', $output);
print_r($output);  // to see the response to your command

Merci pour l'aide les gars, je l'apprécie;)

79
Brian

Vous pouvez également essayer de donner le chemin complet au binaire que vous essayez de lancer. Cela a résolu mon problème lorsque j'essayais d'utiliser ImageMagick.

0
craned