IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

communication entre C et php


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Par défaut communication entre C et php
    bonsoir à tous
    je me trouve devant un problème de communication entre un script php
    et un code en C:
    je m'explique: mon code C est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include <stdio.h>
     
    int main(void)
    {
    	int a;
    	scanf("%d",&a);
    	printf("vous avez entré : %d \n", a);
    	return 0;
    }
    J'appelle ce dernier avec un script php (après avoir compilé le code à la main)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $last_line = system('./a.out', $retval);
     echo '
     <hr />La dernière ligne lue : ' . $last_line . '
     <hr />Valeur retournée : ' . $retval;
    Mon problème est le suivant: normalement mon script en C devrait attendre que je saisisse une valeur avant de m'afficher le résultat. Celui-ci "invente" une valeur pour la variable "a". et le script affiche : "vous avez entré : 134514132".

    Comment je peux faire pour entrer une valeur de "a" avec mon script php ?
    merci par avance de votre aide.

  2. #2
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Citation Envoyé par zobsystem
    bonsoir à tous
    je me trouve devant un problème de communication entre un script php
    et un code en C:
    je m'explique: mon code C est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include <stdio.h>
     
    int main(void)
    {
    	int a;
    	scanf("%d",&a);
    	printf("vous avez entré : %d \n", a);
    	return 0;
    }
    J'appelle ce dernier avec un script php (après avoir compilé le code à la main)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $last_line = system('./a.out', $retval);
     echo '
     <hr />La dernière ligne lue : ' . $last_line . '
     <hr />Valeur retournée : ' . $retval;
    Mon problème est le suivant: normalement mon script en C devrait attendre que je saisisse une valeur avant de m'afficher le résultat. Celui-ci "invente" une valeur pour la variable "a". et le script affiche : "vous avez entré : 134514132".
    Ton programme C n'invente rien, il lit simplement depuis son entrée standard et il retourne cette valeur. Il faut savoir que PHP va créer un environnement pour démarrer ton programme C, donc il va lui fournier une entrée standard, une sortie standard et une sortir pour les erreurs.

    Je ne connais pas bien PHP mais j'imagine que:
    L'entrée standard le flux entrant de HTTP.
    La sortie standard doit être le flux sortant de HTTP.
    La sortie erreur doit être le fichier de log de PHP.

    Citation Envoyé par zobsystem
    Comment je peux faire pour entrer une valeur de "a" avec mon script php ?
    merci par avance de votre aide.
    Peut-on connaître les raisons de ta solution? Que désires-tu faire?

    Essaie donc programme (non testé):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    #include <stdlib.h>
    #include <stdio.h>
     
     
    int main(void) {
        char buffer[1024];
        char *result;
     
        while ((result = fgets(buffer, sizeof buffer, stdin)) != NULL) {
            printf("ENTREE: %s", buffer);
        }
        /* Essaie de recherche ce messages dans les fichiers de log*/
        fprintf(stderr, "SORTIE ERREUR\n");
        return EXIT_SUCCESS;
    }

  3. #3
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Par défaut
    merci pour ta réponse. je comprend mieux la provenance de la valeur que C me renvoie.

    Le but de mon programme est de sortir des données sur le port série, en fonction des variables de php.

    pour ce qui est du script php que j'utilise : il ne permet pas d'intéragir avec le programme que j'apelle, donc le problème vient de là, pas du prog en C.

    j'ai appris que php savait manipuler le port série donc je vais m'orienter vers la solution php seule.

    Bien entendu, je suis toujours preneur de solutions pour faire intéragir du C avec du php, par contre mon post n'est pas dans la bonne section

  4. #4
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Si le programme est lancé de la meme façon qu'un cgi, l'entrée standard forme les données POST
    Si tu veux envoyer des choses sur l'entrée standard de ton programme tu peux utiliser le popen du php (meme fonctionnement qu'en C) -> http://fr3.php.net/manual/fr/function.popen.php
    Sinon tu peux aussi passer des arguments à ton programme, au lieu de lui envoyer des données via l'entree standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int main (int argc, char * argv[])
    {
      if (argc > 1)
      {
        printf ("1er argument : %s\n" argv[1]);
      }
      return 0;
    }
    Edit: en fait je crois qu'il n'y a rien à lire sur l'entree standard, il se pourrait que php ferme carrement stdin et scanf echouerait.
    scanf echouerait et il ne valoriserait pas la variable "a" qui resterait "non initialisee"

    En gros c'est la meme chose que ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int main (void)
    {
      int a;
      printf ("'a' vaut n'importe quoi, la preuve %d\n", a);
     
      return 0;
    }

  5. #5
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Par défaut
    bon comme je suis un petit futé, j'ai posté le meme message dans la zone php et dans la zone C
    je met donc le lien des réponses venant de l'autre topic :http://www.developpez.net/forums/sho...d.php?t=299193
    à noter : tout le monde est d'accord sur le faite que la fonction popen() est celle à utiliser

  6. #6
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par zobsystem
    bon comme je suis un petit futé, j'ai posté le meme message dans la zone php et dans la zone C
    je met donc le lien des réponses venant de l'autre topic :http://www.developpez.net/forums/sho...d.php?t=299193
    à noter : tout le monde est d'accord sur le faite que la fonction popen() est celle à utiliser
    Faute avouée, à moitié pardonnée: http://club.developpez.com/regles/#L3.1

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

Discussions similaires

  1. Communication entre Java et : PHP ou Javascript?
    Par benthebest dans le forum Langage
    Réponses: 5
    Dernier message: 09/11/2009, 20h02
  2. communication entre Acces et php
    Par sebac dans le forum Access
    Réponses: 5
    Dernier message: 15/07/2009, 10h04
  3. [Système] Communication entre C et PHP
    Par zobsystem dans le forum Langage
    Réponses: 5
    Dernier message: 21/03/2007, 17h55
  4. [FLASH 8] Pb de communication entre flash et php
    Par nwarriors dans le forum Flash
    Réponses: 10
    Dernier message: 27/07/2006, 08h18
  5. [PHP-JS] communication entre javascript et php
    Par loukili81 dans le forum Général JavaScript
    Réponses: 24
    Dernier message: 15/06/2006, 17h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo