J'ai ce problème:
Sur un serveur Web ISS, Windows 7 X64 Professional, Zend Server installé. Exécuter cette commande sous PHP: Écrivez à chacun son expérience et des solutions éventuelles ou de solutions de contournement. P> P> $ sortie est vide, $ err = 1. Code> SO EXED ne réagit pas la sortie, elle semble avoir des erreurs.
Php
désactiver_fonctions code> est vide, PHP n'est pas en mode sans échec, est standard, je vérifie toute option.
Il semble s'agir d'une erreur générale, même de rechercher sur Google ne donne pas de résultats. P>
10 Réponses :
Jetez un coup d'œil à Apache Error_log, vous trouverez peut-être le message d'erreur.
Aussi, vous pouvez essayer d'utiliser Popen au lieu d'EXEC. Il donne plus de contrôle car vous pouvez séparer le processus de démarrage de la sortie en lecture: p>
Il est sous Windows avec un serveur IIS cependant.
J'essayais de trouver un journal IIS, mais je ne comprends pas où ils sont sur Win7
Il existe quelques publications sur les sections correspondantes du manuel PHP tel que Celui-ci A>: p>
J'avais du mal à utiliser la commande php Exec pour exécuter n'importe quel lot
déposer. Exécuter d'autres commandes (c'est-à-dire "," dir ") fonctionne bien). Mais si je
Exécuté un fichier de commandes, j'ai reçu aucune sortie de la commande EXEC. p>
La configuration du serveur I est composée de Server Windows Server 2003 Server en cours d'exécution
IIS6 et PHP 5.2.3. Sur ce serveur, j'ai: p>
Il s'avère que même avec tout ce qui précède en place sur le serveur, je
a dû spécifier le chemin complet de cmd.exe dans l'appel Exec. p>
Quand j'avais utilisé l'appel: Alors tout a bien fonctionné. Dans ma situation, Il y a quelques autres sur le
$ sortie = EXEC ("C: \\ Windows \\ System32 \\ cmd.exe code>
/ c $ $ BatchfileTorun "); code> p>
$ batchfileTorun code> était le
chemin du système réel du fichier de commandes (c'est-à-dire le résultat d'un appel à
realpath ()). P>
blockQuote>
exec code>
et shell_exec code>
pages manuelle. Peut-être que les suivants seront peut-être suivra et travailleront pour vous. P>
Je vais essayer de suivre ces étapes, mais ce n'est pas une exécution par lots.
à des fins de sécurité, votre serveur peut avoir un accès restreint à la commande "EXEC". Dans ce cas, vous devez peut-être contacter la société d'hébergement pour supprimer cette restriction (s'il y en a une). P>
J'ai des serveurs locaux et EXEX n'a pas de restriction comme je sais
La principale raison pour laquelle vous obtenez zéro sortie d'une commande telle que Vous pouvez le savoir en appuyant sur Cependant, par pervers, cela peut sonner, j'ai constaté que le moyen le plus fiable de faire quelque chose de processus dans Windows est avec l'utilisation du modèle d'objet composant. Vous avez dit pour nous de partager nos expériences, non? P> $ moi entend des gens rire em> p> regagna votre sang-froid? P> , d'abord, nous allons créer l'objet COM: p> alors, nous allons simplement exécuter ce qui doit être exécuté. P> dir code> est parce que
dir code> n'existe pas. Cela fait partie de l'invite de commande et la solution à ce problème particulier est bien, dans cette page quelque part.
win + r code> et en tapant dans
DIR code> ou
Démarrer code>, un message d'erreur apparaît! P>
$sStdOut = $pShell->StdOut->ReadAll; # Standard output
$sStdErr = $pShell->StdErr->ReadAll; # Error
Edit: Après quelques recherches, la seule façon de voir exécuter la commande DIR est comme celle-ci: afin que vous puissiez essayer ma solution à l'aide de: p> suppress_errors (windows only): suppresses errors generated by this function when it's set to TRUE
bypass_shell (windows only): bypass cmd.exe shell when set to TRUE
Vous pouvez vérifier les permissions de l'utilisateur IIS à cmd.exe si dans la sortie est une ligne similaire (ordinaire = nom de votre ordinateur): P> cacls C:\WINDOWS\system32\cmd.exe /E /G COMPUTERNAME\IUSR_COMPUTERNAME:R
Je sais que j'ai choisi une réponse comme je dois le faire, mais je ne comprends toujours pas pourquoi il ne fonctionnera pas sur ma macchine, mais j'ai trouvé une solution de secours (à l'aide de proc_open) en utilisant une autre méthode:
public static function exec_alt($cmd) { exec($cmd, $output); if (!$output) { /** * FIXME: for some reason exec() returns empty output array @mine,'s machine. * Somehow proc_open() approach (below) works, but doesn't work at * test machines - same empty output with both pipes and temporary * files (not we bypass shell wrapper). So use it as a fallback. */ $output = array(); $handle = proc_open($cmd, array(1 => array('pipe', 'w')), $pipes, null, null, array('bypass_shell' => true)); if (is_resource($handle)) { $output = explode("\n", stream_get_contents($pipes[1])); fclose($pipes[1]); proc_close($handle); } } return $output; }
Je pense que la clé à ceci est l'argument bypass_shell code>. D'après ce que je comprends,
exécuté () code> appels
cmd / c code> sur la commande que vous le transmettez. Et pour une raison quelconque, il ne doit pas manquer de trouver ce fichier initial
cmd.exe code> (peut-être à cause de variables d'environnement local ou autre). En contournant la coquille implicite fournie par PHP et indiquez explicitement à la commande d'exécuter "ce document
cmd code> CMD dans ce répertoire particulier", PHP effectue avec succès ce que vous le dites.
J'étais le même problème et après avoir passé beaucoup d'heures et de tasse de café p>
Il suffit de désactiver le contrôle de compte d'utilisateur (UAC) dans Windows 7 Chemin court: p C: \ Windows \ System32 \ userAccountControlsettings.exe et sélectionnez "Ne jamais notifier" p>
et php Exec () fonctionne bien! P>
J'utilise:
Version Apache: 2.2.11
Version PHP: 5.2.8
Windows 7 SP1 32bit P>
meilleures salutations! : D p>
Je ne me souviens pas maintenant, mais même moi aurait dû handicapé UAC à l'heure, mais même cela devrait être gardé à l'esprit. Bon +1.
Essayez ceci: Ça fonctionne bien sur Windows 8.1 64bits avec UAC activé. p> p>
Si vous êtes sur la machine Windows et essayez d'exécuter un exécutable comme celui-ci: et il n'y a pas de sortie ou votre fichier n'est pas démarré, vous devez essayer ceci: p> Ça devrait fonctionner. P> Ceci est particulièrement pratique si l'on utilise un chemin relatif de dossier où le script est actuellement situé, par exemple: P> et n'oubliez pas de CHDIR () Retour au dossier d'origine si vous devez exécuter d'autres programmes. P> P>
Peut-être parce qu'il y avait une erreur? :) Vérifiez quelle erreur 1 code signifie ...
Si je lance la même commande sur CMD Shell avec PHP Script.php, cela fonctionne, lorsque je le lance à partir du navigateur (SO Server Web), cela ne fonctionne pas, je ne comprends vraiment pas où l'erreur est
@albanx: Cela me conduirait à croire aux autorisations si cela fonctionne lorsque vous l'exécutez et non lorsque IIS est.
@ALBANX ESSAYEZ APPENDANT
2> & 1 CODE> à la commande que vous exécutez et voyez si vous pouvez voir des messages d'erreur.
Même
2> & 1 code> ne pas donner le résultat, je pense aussi que cela peut être un problème d'autorisation mais je ne peux pas le comprendre, je donne à l'utilisateur IIS toute la permission possible