2011-08-25 6 views
4

c'est un peu compliqué. :-) J'ai un site web écrit en PHP qui doit appeler un programme externe écrit en .NET, fonctionnant sous Mono. Il appelle le programme avec:Appeler Mono à partir de PHP

/path/mono /path/executable arguments... 

comme d'habitude (j'ai essayé aussi de mettre cela dans un script bash et appeler le script lui-même de PHP). Pour autant que je sache, tout est configuré selon les besoins. Mono lui-même fonctionne bien, exécutable (ou script) avec des droits exécutables, les propriétaires sont tous les droits. La configuration correcte peut également être vérifiée du fait que si j'émets la ligne de commande ci-dessus (ou appelez le script mentionné) à partir d'une ligne de commande sur le serveur (Debian Lenny), tout fonctionne parfaitement, mon exécutable est exécuté sans erreur. Mais, si PHP appelle le même (en utilisant exec(), system() ou toute autre variante), j'obtiens immédiatement un code de sortie de Mono de 6 et mon exécutable n'est pas exécuté du tout (afin de le tester , J'utilise un exécutable "Hello World" qui ne fait rien mais émet une seule ligne de sortie et retourne 0). Compilé sans aucune dépendance supplémentaire, juste un vrai "Hello Word". Il est absolument certain que ce programme ne renvoie pas le code de sortie 6, il doit provenir de Mono mais je n'ai pas pu le trouver documenté nulle part.

Je peux appeler n'importe quoi d'autre depuis PHP, donc ce n'est pas un mode sans échec ou une restriction similaire qui m'empêcherait d'exécuter des programmes externes à partir de PHP.

Merci pour toute idée ...

+0

Mono a une grande support pour les services web. Si vous essayez simplement d'exécuter quelque chose écrit en .NET, pourquoi ne pas l'exposer via le service? –

+0

Invoquez-vous le script PHP via le serveur Web ou à partir de la ligne de commande? Rappelez-vous que la configuration de PHP est généralement très différente quand il est en mode CLI v.s. Mode SAPI. –

+0

C'est une très, très mauvaise idée d'utiliser 'exec()'. – skolima

Répondre

2

Essayez d'exécuter mono à partir de la ligne de commande, mais avec l'utilisateur exécutant le serveur Web (www-data ou apache).

ej.

#su apache 
$/path/to/mono /path/to/program.exe 

Les problèmes communs que je l'aide exec est une autre variables d'environnement (regardez si est bash ou sh ce que apache utilise), les autorisations à l'utilisateur/groupe de apache, etc.

Questions connexes