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 :

Comment appeler un programme PHP à partir de C++


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 43
    Par défaut Comment appeler un programme PHP à partir de C++
    Bonjour,

    Je voudrais appeler un programme PHP à partir d'un programme C++. Je souhaiterais pouvoir passer des paramètres et récupérer dans le programme C++ la chaine de caractères renvoyée par le programme PHP.
    Savez-vous s'il est possible de faire cela, et comment ?

    Merci

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Je pense que seul un serveur WWW peut invoquer une page PHP.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 43
    Par défaut
    Il s'agit effectivement d'appeler un programme PHP qui se trouve sur un serveur.
    Cela reviendrait à ouvrir une url à partir de C++, et récupérer la chaine renvoyée par le PHP ?

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 636
    Par défaut
    Salut,

    Il faut savoir que, le plus souvent, les scripts PHP ont pour but de créer des pages Web, le plus souvant des pages HTML, mais peut être aussi des document XML et/ou faire passer la réponse pour certains formats particuliers (archives, images, sons, audio-visuels, texte,...)

    Si tu appelles une url pointant sur un script PHP, tu dois donc t'attendre à récupérer... une page HTML en retour

    Mais bon, le protocole utilisé pour discuter avec des scripts PHP est clairement identifié (le protocole HTTP), le(s) port(s) sur lesquels demander les URI itou (80, éventuellement 8080 si au travers d'un proxy et 443), et on peut clairement identifier ce que l'on reçoit.

    Dés lors, il "suffit" de créer un ... client HTTP, en utilisant, par exemple, la bibliothèque boost.asio, ou curl++ ou toute autre bibliothèque fournissant le support de sockets et/ou du protocole HTTP

    Pour le reste, il faut voir ce que le script est sensé te renvoyer, afin de pouvoir t'indiquer comment gérer la réponse
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Invité
    Invité(e)
    Par défaut
    Pour invoquer un script php en mode Standalone (sans serveur web) Il faut utiliser l'exécutable Standalone de php (en php4 on peut invoquer le php.exe de la racine de PHP avec le paramètre -p en php5 je crois que le nouveau est php-cli.exe mais cela reste à confirmer)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /php/php.exe -f nom_page.php
    J'utilise ce code dans un .bat qui me fournit donc un retour sur la console

    tu peux à la limite rediriger la sortie vers un fichier texte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /php/php.exe -f nom_page.php > fichier.txt
    et utiliser à ce moment c++ pour lire le fichier résultat.

    mais cette méthode que je te donne passe par l'utilisation intermédiaire des fichiers .bat et je suppose que tu veux contrôler directement php. Il faut voir si l'invocation par exec ou les threads peut être rediriger sur un flux.

    Pour résumer trois pistes :
    - Passage intermédiaire par un .bat avec redirection de la sortie sur un .txt.
    - exec() ou _exec().
    - Threads.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 43
    Par défaut
    Merci pour vos réponses.

    La solution d'exécuter directement le script php situé sur un serveur web, en créant un client http, correspondrait effectivement plus à ce que je cherche à réaliser.

    Pour répondre à koala01, le script est censé retourner une chaine de caractères.
    Pourrais-tu m'indiquer alors comment gérer la réponse ?
    J'ai trouvé de la documentation sur boost.asio mais rien sur curl++.

  7. #7
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 636
    Par défaut
    La gestion est, sommes toutes, identique à toute communication client/serveur:
    1. résolution de l'adresse
    2. ouverture du port
    3. connexion au serveur
    4. envoi de la requête (pe: dossier/tonscript.php?var1=val1&var2=val2 )
    5. réception de la réponse dans un "buffer"
    6. analyse syntaxique de la réponse ( == s'assurer que "l'orthographe" correspond à ce que l'on attend)
    7. analyse lexicale de la réponse ( == tri des données reçues de manière à en obtenir des objets qui ont un sens)
    8. fermeture du port
    9. utilisation des objets créés sur base de la réponse.
    Le tout, en utilisant le protocole et le port "qui vont bien" pour le type de réponse que l'on attend de la part du script.

    Comme php peut ne renvoyer qu'une chaine de caractères mais qu'il est généralement exécuté sur un serveur:
    1. à l'écoute du port 80
    2. utilisant le protocole HTTP
    "YAPUKA" utiliser... ce port et ce protocole

    De manière générale, tout ce qui passe par le réseau se fait par l'utilisation de sockets ouverts sur des ports particuliers.

    En cela, boost fournit une première partie de la réponse étant donné qu'il s'agit d'une bibliothèque spécialisée et portable de gestion des sockets

    En ce qui concerne curlpp (désolé, c'est pp et non ++ ), il s'agit d'un wrapper de la bibliothèque Curl en C++.

    Tu trouvera les source de cette bibliothèque sur source forge

    Pour le reste, quelques détails supplémentaires nous permettraient surement de te fournir plus de précisions
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 43
    Par défaut
    Merci pour cette description.
    Cependant je rencontre les problèmes suivants :

    - pour Curlpp : Je n'ai pas trouvé les sources pour windows !
    - pour boost : je n'arrive pas à compiler les modules avec bjam.exe
    Lorsque j'essaie de compiler le module system, une fenêtre s'ouvre et me demande de sélectionner une application pour ouvrir le fichier error_code.obj.rsp
    La ligne de commande que je tape sous dos est : bjam --with-system --toolset=intel stage
    Il me semble pourtant avoir correctement suivi la doc "Getting Started on Windows".
    Merci pour votre aide.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 43
    Par défaut
    Ok, ça marche ! J'ai réussi à faire fonctionner boost::asio.
    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/02/2012, 16h01
  2. Réponses: 2
    Dernier message: 23/10/2009, 21h32
  3. Comment appelé un programme AS400 a partir de VB6
    Par Aminos dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 15/08/2006, 13h12
  4. [MySQL] Comment appeler du code PHP par requête
    Par mickdu90 dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 19/04/2006, 10h55
  5. Réponses: 2
    Dernier message: 16/10/2005, 14h07

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