php exec() n'est pas de l'exécution de 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, j'ai besoin d'exécuter un .exe
fichier avec les paramètres de php
via exec()
fonction.
J'ai essayé ceci dans invite de commande et en fait il exécute le programme avec les paramètres donnés. C'est l'exemple de la commande.
NOTE le fichier exe obtient 3 entrées (dossier, nom_fichier, report_file_nmae)
> ..\..\some_file.exe folder="C:\path_to_folder" param=1.xml report=2.xml
Mais quand je lance cette commande à partir de php
fichier:
exec('..\..\some_file.exe folder="C:\path_to_folder" param=1.xml report=2.xml');
rien ne se passe. C'est la première fois que je suis en utilisant la fonction exec (), donc je ne suis pas familier avec les détails. Quel est le problème?
J'ai essayé d'utiliser:
\\
au lieu de\
escapeshellarg()
sur le répertoire- ajouté
""
autour répertoire 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é la permission sur le fichier pour le contrôle total à tous les utilisateurs.
Si je l'appelle le programme de command prompt
, je peux voir l'icône apparaissant à côté de l'horloge pour une seconde.
Mais le même appel de php
ne sera même pas appeler le programme.
Modifier
Même exec('notepad.exe');
ne fonctionne pas. Quelque chose doit être fait avec php
configurations peut-être?
- Assurez-vous que PHP dispose de l'autorisation d'exécution de ce fichier.
- comment puis-je m'assurer.....
- Honnêtement, je ne sais pas comment le faire dans Windows puisque c'est la permission système est réel incompatible.
- quelle est la
..\..\some_dir
au début, pour ? - Avez-vous essayé d'obtenir la sortie de
exec()
? Essayez quelque chose comme$out = array(); exec('your_command 2>&1',$out);
; bien que la2>&1
est un linux chose. - Oui, il me donne
<
....pourquoi? - ne pas obtenir de vous remettre en question
- Vous avez besoin de la production complète, non seulement la dernière ligne. Voir: php.net/manual/en/function.exec.php ... Cela signifie que vous devez avoir un tableau comme dans mon exemple.
- ma question est au sujet de la syntaxe de la commande: il ressemble:
relative-path-to-folder<space>full-path\file.exe...
et je ne suis pas ce que la première partie - comment ça fonctionne à partir d'invite de commandes ? - Oh, je vois, c'était une faute de frappe, j'ai ÉDITÉ...tnx
- Briser ce problème un peu. Si vous spécifiez le chemin complet vers le fichier EXE, ça fonctionne? Si vous permettre à tout utilisateur sur le système à exécuter, cela fonctionne t'il?
- mais si, à partir de l'invite de commande, il fonctionne sans chemin d'accès complet, avez-vous la chose qui est la raison? Parce que l' .exe est relative à partir de ce chemin d'accès de fichier php qui appelle la méthode exec()... Ce que vous voulez m'ajouter...dites-le moi
- Pas de, du chemin d'accès complet n'a pas changer quoi que ce soit.
- Oui, vous pourriez être la raison parce que le serveur de l'utilisateur exécute à partir d'un autre dossier!
Vous devez vous connecter pour publier un commentaire.
J'ai déjà dit que j'étais de nouveau à
exec()
fonction. Après avoir fait quelques plus de creuser, je suis tombé sur2>&1
qui doit être ajouté à la fin de la commande enexec()
.Grâce
@mattosmat
pour la pointer dans les commentaires aussi. Je n'ai pas essayé à la fois parce que vous avez dit que c'est une commande Linux, je suis sur Windows.Donc, ce que j'ai découvert, la commande est actuellement en cours d'exécution dans le back-end. C'est pourquoi je ne pouvais pas le voir effectivement en cours d'exécution, je m'attendais à arriver.
Pour vous tous, qui avez eu le même problème, mon conseil est d'utiliser cette commande. Elle fera ressortir toutes les erreurs et aussi vous dire info/détails de l'exécution.
Merci à tous pour l'aide les gars, je l'apprécie 😉
Vous pourriez aussi essayer de donner le chemin complet vers le binaire que vous essayez d'exécuter. Qui a résolu mon problème lorsque vous essayez d'utiliser
ImageMagick
.