2009-07-10 11 views
4

Je veux exécuter un fichier exe sur mon serveur et renvoyer la sortie à l'écran du navigateur. Le fichier exe prend un fichier d'entrée, puis renvoie des données à l'écran.exec php et shell_exec ne fonctionnent pas

Pourquoi ce code ne fonctionne-t-il pas?

$output = shell_exec('myprogram < INP.DAT'); 
echo "<pre>" . var_export($output, TRUE) ."</pre>\\n"; 

Il affiche "NULL" sur l'écran du navigateur. J'ai aussi essayé exec(). Là, il renvoie "Array()".

Répondre

7

One of the comments sur la page de manuel shell_exec dit:

Prenez garde de l'incompatibilité suivante: shell_exec() et l'opérateur backtick ne reviendra pas une chaîne si la sortie de la commande est vide - ils reviennent NULL à la place.

Ceci fera des comparaisons strictes à '' renverra false.


Il peut être disabled if PHP is in safe mode.

shell_exec() (équivalent fonctionnel de contre-apostrophes)
Cette fonction est désactivée lorsque PHP fonctionne en mode sans échec. Vous pouvez uniquement exécuter des exécutables au sein du safe_mode_exec_dir. Pour des raisons pratiques, il est actuellement interdit d'avoir des composants .. dans le chemin d'accès à l'exécutable. escapeshellcmd() est exécuté sur l'argument de cette fonction.

Vous pouvez vérifier les paramètres PHP de votre serveur à l'aide de la fonction phpinfo().

+0

si exec (« ls ») fonctionne, peut-il être encore mode sans échec? – chris

+0

ce n'est pas en mode sans échec – chris

+0

Mise à jour, découverte plus prometteuse –

2

cela devrait fonctionner:

 
$output = array(); 
exec('myprogram < INP.DAT', $output); 
var_dump($output); 
+0

merci, malheureusement, il affiche simplement "array (0) {}" – chris

+0

c'est parce que le tableau que vous créez là est vide ... –

+0

Cependant , la fonction exec doit remplir le tableau $ output avec les lignes retournées par la commande shell, cela devrait fonctionner – edhurtig

2

est-myprogram disponible à partir d'un shell par défaut? Est-ce dans un répertoire spécifique?
Essayez de remplacer myprogram < INP.DAT avec /full/path/to/myprogram < INP.DAT

0

Parfois, ces fonctions sont désactivées sans php sont en mode sans échec, vous devez les activer dans php.ini

Questions connexes