2010-10-03 3 views
0

J'utilise un serveur local sur mon ordinateur portable pour contrôler un programme C# via PHP. Fondamentalement, je prends un POST passé à mon serveur Web, et l'utiliser comme les paramètres d'un programme de ligne de commande. Mon code est essentiellement ceci:Exécution du programme à partir de la ligne de commande via PHP - Passer des commandes au lieu de redémarrer le programme à chaque fois

$parameters = $_POST['parameters']; 
system('C://THEFILEPATH/myprogram.exe ' . $parameters); 

Le problème est que ce myprogram.exe amène à arrêter et commencer à chaque fois que je veux passer quelque chose. Puisqu'une bonne partie de mon programme est l'initialisation, cela cause un peu de retard inutile. Existe-t-il un moyen d'exécuter myprogram.exe via PHP, et de lui passer les variables comme il continue à fonctionner au lieu de le redémarrer à chaque fois?

Merci!

+2

Sons dangereux - assurez-vous que personne ne peut injecter des commandes à votre application en ligne de commande. – Oded

+0

Je viens de vous donner les os du programme. Certainement une bonne chose à surveiller cependant, merci. – Ethan

Répondre

1

prenez l'entrée et écrivez-la dans un fichier. votre myprogram doit lire le fichier de temps en temps et supprimer toutes les entrées de lecture pour que le fichier fonctionne comme une file d'attente. Si vous voulez toujours exécuter votre programme et en cours d'exécution recevoir votre entrée, vous devriez envisager d'implémenter un composant pour écouter un port réseau spécial.

0

http://www.php.net/manual/en/function.proc-open.php Ceci fournit un support bidirectionnel (lecture et écriture). Cependant, je ne suis pas sûr de la façon dont cela est testé sur Windows. Il dit plus tard là-bas:

Compatibilité avec Windows: Descripteurs au-delà de 2 (stderr) sont mis à la disposition du processus enfant comme poignées héritable, mais comme l'architecture Windows n'associe pas les numéros de descripteurs de fichiers avec des poignées de bas niveau, la Le processus enfant n'a pas (encore) de moyen d'accéder à ces poignées. Stdin, stdout et stderr fonctionnent comme prévu.

Vous devriez donc pouvoir écrire comme un fichier.

Questions connexes