Votre question

Executer un code ecrit en C++ sous PHP

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
13 Juin 2010 02:41:08

bonjour a toutes et a tous
bon voilà, mon problème c que j'ai un algorithme de colonie de fourmis écrit en c++, et je voulais l'appeler et l'exécuter sous php sur mon site, et je ne c pas comment faire.

SVP, aidez moi le plutôt possible, j'en ais vraiment besoin de ça, avant ce mardi(15 juin).

merci d'avance

Autres pages sur : executer code ecrit php

13 Juin 2010 04:54:39

Bonjour,

Il y a plusieurs moyen ... Du plus simple au plus compliqué :

1 : Exécuter un programme à partir de PHP (< clic)

2 : Transformer ton code C en code PHP ... C'est pas bien compliqué en général, mais par contre c'est pas aussi performant que le 1.

3 : Sinon, tu peux aussi considérer de mettre ton exécutable écrit en C dans le dossier "cgi-bin" si il existe, c'est un répertoire réservé aux exécutable normalement, ou aux scripts Perl ...

L'avantage est clair : possible appel en AJAX, utilisation varié etc... Mais c'est compliqué et faut avoir les droits d'exécution etc... Un certain contrôle de l'hébergement est nécessaire.

Modifie un peu ton code C pour faire une écriture XML ou HTML compréhensible par le navigateur ou un autre script l'appelant.

Exemple :

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main(void)
  4. {
  5. char *data;
  6. long m,n;
  7. printf("%s%c%c\n", "Content-Type:text/html;charset=iso-8859-1",13,10);
  8. printf("<html><head><title>Titre</title></head><body>\n");
  9. printf("<H3>Hello World</H3></body></html>\n");
  10. return 0;
  11. }


C'est un exécutable en C qu'il est possible d'appeler par un navigateur, avec un header (content-type) etc ...


Voila, il y a plein de possibilité ... La plus simple étant la 1 et la plus chiante la 3 ...

Bon courage.
m
0
l
13 Juin 2010 15:48:27

bonjours RedSux :) 

merci de m'avoir répondu, mais je m'excuse j'ai rien compris dans tes propositions,
peut tu être un peu précis dans tes réponse STP, psq je suis débutant en programmation,
et je voulais une solution le plus rapide possible psq j'ai pas assez du temps :??:  :ouch: 

merci en core une fois RedSux, aides STP :) 
m
0
l
Contenus similaires
13 Juin 2010 16:49:19

Bonjour,

De rien, mais ne te fais pas d'illusion non plus, je ne ferais pas ton boulot à ta place ...

Le plus simple, comme je l'ai dis précédemment, c'est d'utiliser les fonctions d'exécution de programme externe : Il y a plusieurs fonctions ICI (< clic)

Prenons par exemple proc_open, qui permet des définir des entrées sorties.

Exemple de code :

  1. <?php
  2. $descriptorspec = array(
  3. 0 => array("pipe", "r"), // // stdin est un pipe où le processus va lire
  4. 1 => array("pipe", "w"), // stdout est un pipe où le processus va écrire
  5. 2 => array("file", "/tmp/error-output.txt", "a") // stderr est un fichier
  6. );
  7.  
  8. $cwd = '/tmp';
  9. $env = array('quelques_options' => 'aeiou');
  10.  
  11. $process = proc_open('php', $descriptorspec, $pipes, $cwd, $env);
  12.  
  13. if (is_resource($process)) {
  14. // $pipes ressemble à :
  15. // 0 => fichier accessible en écriture, connecté à l'entrée standard du processus fils
  16. // 1 => fichier accessible en lecture, connecté à la sortie standard du processus fils
  17. // Toute erreur sera ajoutée au fichier /tmp/error-output.txt
  18.  
  19. fwrite($pipes[0], '<?php print_r($_ENV); ?>');
  20. fclose($pipes[0]);
  21.  
  22. echo stream_get_contents($pipes[1]);
  23. fclose($pipes[1]);
  24.  
  25. // Il est important que vous fermiez les pipes avant d'appeler
  26. // proc_close afin d'éviter un verrouillage.
  27. $return_value = proc_close($process);
  28.  
  29. echo "La commande a retourné $return_value\n";
  30. }
  31. ?>


Et voila ce que ça va écrire :

Array
(
[some_option] => aeiou
[PWD] => /tmp
[SHLVL] => 1
[_] => /usr/local/bin/php
)
La commande a retourné 0


Comprends tu le fonction ? Dans cet exemple, le script PHP fait appel à l'exécutable "php".

Il te suffit d'appendre à utiliser correctement cette fonction : prog_open (< clic)

C'est tout ce que peut te donner pour l'instant, ça devrait t'aider.
m
0
l
13 Juin 2010 16:50:08

Entièrement d'accord Edyr ... C'était d'ailleurs mon deuxième point dans mon premier message ... Mais il a pas l'air de comprendre non plus ...
m
0
l
13 Juin 2010 16:51:10

Bonjour,

Je me permet d'ajouter que si ton algorithme n'est pas trop long ni complexe, le porter en PHP est peut être plus simple et rapide que de le garder sous ça forme en C++.

Surtout que le portage C++ vers PHP est relativement simple.
m
0
l
13 Juin 2010 16:53:23

ah oui désolé, j'avais pas vu que tu avais déjà proposé cette solution :) 
m
0
l
13 Juin 2010 18:15:49

Merci bcp a tous, surtout un grand merci a toi RedSux, je v essayer
m
0
l
13 Juin 2010 18:18:04

oui justement Edyr , mon algorithme est trop compliqué, c'est l'algorithme d'optimisation par colonie de fourmis, tu le connais je crois ?
m
0
l
13 Juin 2010 18:52:34

pour mieux me comprendre voilà le codes que je voulais l'exécuter , c vraiment compliqué :??: 
m
0
l
13 Juin 2010 18:59:12

Avec un exécutable paramétrable (nombre de noeud, etc.) tu peux utiliser le "proc_open" de tout à l'heure.

Sinon, c'est faisable de le porter en PHP, mais bon tu vas y passer un peu de temps.
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS