2010-04-02 10 views
1

J'essaie d'utiliser le PHP exec() ou system() (ou toute autre fonction similaire) pour exécuter un fichier batch, mais je ne peux pas semblent les obtenir pour retourner n'importe quoi.Les fonctions exec() et system() de PHP retournent toujours false dans IIS

L'exemple le plus simple que j'ai vu est ce qui génère rien:

<?php 
    echo system('dir'); 
?> 

Le script est en cours d'exécution sur une machine Windows XP sur IIS avec PHP installé et je l'ai aussi essayé sur mon hébergement mutualisé compte exécutant Windows 2003 Server/IIS. Est-ce que quelqu'un peut suggérer ce que je dois faire pour que cela fonctionne, ou fournir toutes les commandes que je peux utiliser pour le dépannage?

Cheers,

Tom

Edit: deuxième exemple

Sur la base de la réponse de pavun_cool j'ai essayé ce qui suit:

<?php 
    $last_line = system('dir', $retval); 
    echo 'last_line '.$last_line.'<br/> retval '.$retval; 
?> 

La sortie est:

last_line 
retval -1 

Edit: troisième exemple

Basé sur Dilaverakis j'ai essayé Manos le code suivant

<?php 
exec('dir', $response); 
foreach($response as $line) { 
    echo $line . "<br>"; 
} 
?> 

La sortie est:

<br> 

à savoir une ligne vide lorsqu'elle est affichée dans un navigateur.

recherche également dans php.ini, la ligne suivante (qui vraisemblablement pourrait désactiver ces fonctions) est vide:

disable_functions = 

Quelqu'un at-il d'autres suggestions ou tout ce que je peux essayer?

+0

... pages de manuel de PHP sur exec et la réponse du système ce. Vous n'avez même pas besoin de faire défiler –

+1

@Manos Dilaverakis - pourriez-vous être un peu plus précis? Le texte de la fonction exec indique "Valeurs de retour: la dernière ligne du résultat de la commande". - alors ne devrais-je pas voir la dernière ligne de sortie de tout ce que je cours courir? – Loftx

Répondre

1

Pour obtenir des valeurs de retour, vous devez passer le second argument de la fonction système.

$last_line = system('ls', $retval); 

Ici $retval aura la valeur de retour de l'exécution ls.

+0

J'ai essayé ceci et l'ai ajouté à ma question ci-dessus - $ retval est -1 plutôt que la sortie que je m'attendrais. – Loftx

0

Ici, si cela ne fonctionne, alors exec est probablement désactivé dans php.ini, ce qui signifie que vous aurez de ne pas changer votre configuration PHP

<?php 
exec('dir', $response); 
foreach($response as $line) { 
    echo $line . "<br>"; 
} 
?> 
+0

Je viens d'essayer cela, et la sortie est simplement
aussi il ne semble y avoir aucune fonction désactivée dans php.ini. – Loftx