2008-11-12 5 views
1

J'ai un programme de cgi-bin de site Web écrit en C++.Comment appeler C++ binaire à partir de Perl ou PHP (CGI-BIN en utilisant Apache sur Linux)?

Malheureusement, le fournisseur de site Web pour le site de mon ami n'autorise que les scripts Perl ou PHP cgi-bin.

Existe-t-il un moyen facile d'avoir simplement un très petit wrapper Perl ou PHP qui appelle simplement le binaire compilé C++?

Le programme C++ pourrait-il encore lire depuis stdin pour les commandes POST ou devrait-il être lu par Perl ou PHP, puis retransmis?

Répondre

4

Vous pouvez utiliser les guillemets de Perl ou les commandes "système" pour exécuter les commandes du shell. De plus, perl a beaucoup de classes "Inline" qui vous permettent d'écrire du code dans d'autres langues pour être appelé en perl, y compris un pour C++. Si vous ne trouvez pas quelque chose qui fonctionne, vous pouvez peut-être créer votre propre wrapper en utilisant ce paquet.

2

Vous pouvez utiliser la fonction system() de PHP pour exécuter une commande shell, que vous pouvez utiliser pour lancer un autre programme. Le STDOUT de ce programme irait alors au même endroit que stdout de php (à la connexion HTTP). Vous devrez peut-être faire quelques déconner pour obtenir stdin à lire de get/post/etc.

Mais le fournisseur de site Web a probablement désactivé votre capacité à exécuter des programmes de cette manière. Cela peut être un risque pour la sécurité, et si seulement ils autorisent spécifiquement php et perl, ils désactiveraient probablement autant de méthodes d'exécution de php/perl que possible. Donc, une réponse courte est que vous n'avez probablement pas de chance.

0

Voir mon blog Awstats Wrapper pour un code PHP qui a résolu mon problème. Mon approche consistait à construire une ligne de commande qui avait les bonnes variables d'environnement définies à partir des paramètres de requête CGI, puis à effectuer des substitutions sur la sortie résultante afin que les liens renvoyant au CGI reviennent à mon script wrapper. J'ai également nuked la sortie des en-têtes du CGI puisque PHP fournit ses propres en-têtes.

Questions connexes