Se connecter avec
S'enregistrer | Connectez-vous

Executer un code ecrit en C++ sous PHP

Dernière réponse : dans Programmation
Lassé par la pub ? Créez un compte
Expert Programmation

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.

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 :) 
Expert Programmation

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.
Expert Programmation

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.
Expert Programmation

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.
Lassé par la pub ? Créez un compte
Tom's guide dans le monde