2009-11-17 14 views
0

J'ai un script PHP qui appelle un fichier .bat en utilisant system(). La sortie est écrite à l'écran et je dérive certaines valeurs de l'analyse de cette sortie. Cela fonctionne sur le serveur IIS Windows 2003. PHP v5.2.0Pourquoi ma commande PHP system() a-t-elle arrêté de renvoyer la sortie à mes scripts ... j'avais l'habitude de travailler!

Spécifiquement j'utilise ce script pour lancer une instance Amazon EC2 et lui assigner une adresse IP. Cela a fonctionné très bien pour moi jusqu'ici mais récemment le problème a commencé.

Voici le code

$resultBatTemp = system("cmd /C C:\Inetpub\ec2\my_batch_file_to_launch_instance.bat"); 
$resultBat = (string)$resultBatTemp; 
$instanceId = substr($resultBat, 9, 10); 

...

Une fois que j'ai cet identifiant instace je peux exécuter un autre fichier batch qui associe appelle une adresse IP à cette instance. Il semblerait que l'instance soit lancée mais je n'obtiens jamais la sortie à l'écran.

Pour une raison quelconque, tout cela a cessé de fonctionner, la page se fige et ne se rafraîchit jamais. J'ai également besoin de quitter complètement safari ou Mozilla sinon toutes les pages du site ne parviennent pas à charger. Ce n'est que lorsque je relancer le navigateur que je peux revoir le site Web. Je me suis connecté au serveur Web qui héberge ces scripts et j'ai vérifié le journal des erreurs PHP, mais rien ne s'y trouve. J'ai ouvert une invite DOS et entré le code du fichier bat de cette façon et il se connecte à Amazon et lance l'instance bien. J'ai isolé ce bit de code et j'ai supprimé la commande système et le reste du script s'exécute correctement, de sorte qu'il semble que le hold up soit avec la sortie des résultats du fichier bat.

Récemment, j'ai acheté un nouveau nom de domaine pour le site afin que ce script s'exécute à partir de ce domaine. Cela pourrait-il causer le problème?

grâce

----------------------------------------- -------METTRE À JOUR------------------------------------------ Eh bien j'espère que cela aide quelqu'un, je n'ai pas trouvé ce qui n'allait pas, mais j'ai créé un nouveau fichier PHP avec une simple commande système qui appelait un fichier .bat, et un fichier .bat qui n'existait pas. une erreur de retour mais rien - juste l'habitude de pendre pendant des siècles. J'ai donc redémarré IIS et cela a résolu le problème. Ne sait pas ce qui n'allait pas, mais cela a fait l'affaire.

Répondre

1

Peut-être d'abord vérifier ce que l'appel system() renvoie. Selon documentation il renverra FALSE en cas de panne. En outre, en incluant votre my_batch_file_to_launch_instance.bat dans la question pourrait aider à le résoudre.

+0

Merci pour votre aide, même si j'ai trouvé une solution - voir la question mise à jour. – undefined

+0

Oui, redémarrer le serveur web (ou quoi que ce soit, d'ailleurs) peut faire des merveilles à des problèmes étranges. Été là ;-) –

1

Essayez d'utiliser la fonction passthru

Assurez-vous également que toutes vos commandes sont escapeshellarg d'utilisation() ou escapeshellcmd() pour faire en sorte que les utilisateurs ne peuvent pas le système en exécutant des commandes arbitraires.

+0

Merci, j'ai essayé passthru mais rien encore. Merci pour les conseils sur l'escapeshell .. – undefined