2009-07-18 8 views
4

Je dois exécuter un fichier batch .cmd à partir d'un script PHP.Comment exécuter un fichier .cmd à partir de PHP et afficher les résultats

Le PHP sera accessible via une session authentifiée dans un navigateur.

Lorsque j'exécute le fichier .cmd à partir du bureau du serveur, il génère une sortie vers cmd.exe.

Je voudrais rediriger cette sortie vers la page php.

Est-ce faisable?

+0

[ajouté un commentaire à nouveau parce que le lien a été borked] Ne pas entourer le fichier .cmd en backticks le faire, comme l'exemple avec le fichier .bat ici? http://www.php.net/manual/pl/language.operators.execution.php – sigint

+1

Quelque chose comme ça? Je n'ai pas PHP à portée de main pour le moment, donc je ne peux pas tester ça, désolé! $test"; ?> – sigint

+0

@ hamlin11 - Qu'est-ce qui ne fonctionne pas à ce sujet ("print' l''' ")? Je l'ai juste testé (sur une machine Linux, cependant) et ça a bien fonctionné pour moi. Essayez: –

Répondre

4

Oui c'est faisable. Vous pouvez utiliser

exec("mycommand.cmd", &$outputArray); 

et imprimer le contenu du tableau:

echo implode("\n", $outputArray); 

look here for more info

2
$result = `whatever.cmd`; 
print $result; // Prints the result of running "whatever.cmd" 
1

Vous pouvez utiliser shell_exec, ou backticks operator, pour lancer une commande et obtenir la sortie comme une chaîne.

Si vous voulez passer des paramètres à cette commande, vous devriez envisager d'utiliser escapeshellargs pour les échapper avant d'appeler la commande; et vous pouvez jeter un oeil à escapeshellcmd aussi ^^

1

Utilisez la fonction popen() php

2

Je préfère utiliser popen pour ce genre de tâche. En particulier pour les commandes de longue durée, car vous pouvez récupérer la sortie ligne par ligne et l'envoyer au navigateur, ce qui réduit les risques d'expiration. Voici un exemple:

$p = popen('script.cmd', 'r'); 
if ($p) 
{ 
    while (!feof($p)) 
     echo gets($p); // get output line-by-line 
    pclose($p); 
}