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

Langage PHP Discussion :

Appeler un programme CGi-bin depuis un script php, depuis un intraweb \ WAMP [PHP 7]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de devEric69
    Homme Profil pro
    Dév. Lazarus & C++, Php - Windows & Ubuntu
    Inscrit en
    Novembre 2012
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Dév. Lazarus & C++, Php - Windows & Ubuntu
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 74
    Par défaut Appeler un programme CGi-bin depuis un script php, depuis un intraweb \ WAMP
    Bonjour,

    Je suis sous Windows 7 + WAMP = Uniserver + Php 7.1.

    1°) J'ai écrit un premier tout petit programme console en Lazarus \ Pascal (qui fait jute un Writeln(' world'); sur le stdOUT de la console), qui est un programme lancé en CGI-bin depuis ce script Php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    declare(strict_types=1);
    // Le programme project1.exe est un programme console qui renvoie juste la chaine 'Hello' 
    // concaténée avec le param. 'world', suivi de son emplacement.
    echo exec('D:\programs\projects\helloWorldConsole\project1.exe world');
    Exit;
    ?>
    Et ça marche, car j'obtiens une page HTML qui m'affiche :
    Hello world, from D:\programs\projects\helloWorldConsole\project1.exe

    2°) Je suis content du résultat, mais il est mince. J'ai donc écrit un second petit programme console qui une page texte brut avec seulement 'Coucou' dedans i.e. je renvoie juste un texte brut sans headers. La seule modification est que ce programme a une URL différente, car il est et console, et réellement CGI (présence d'un bootstrap?) cette fois. Si je tape son URL dans la barre du navigateur (http://localhost/cgi-bin/extgrid.exe/Provider/form_edit), j'obtiens le 'Coucou'. Ça marche depuis l'URL, donc.
    Maintenant, je veux lancer ce programme CGI depuis ce script compilé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    declare(strict_types=1);
    echo exec('D:\Orion7\UniServerZ\cgi-bin\extgrid.exe /Provider/form_edit');
    Exit;
    ?>
    J'ai toujours une page blanche comme renvoi .

    ==> Auriez-vous des piste(s), des méthodes, pour que je comprenne ce que je dois appeler, où chercher, quoi changer?

    ps2: en pièce jointe, il y a ma config. d’environnement CGI.
    ps2: j'ai testé ces URL qui ne fonctionnent pas:
    // --NOK:-- echo exec('D:\Orion7\UniServerZ\cgi-bin\extgrid.exe');
    // --NOK:-- echo exec('D:\Orion7\UniServerZ\cgi-bin\extgrid.exe /Provider/form_edit');
    // --NOK:-- echo exec('D:\Orion7\UniServerZ\www\Provider\form_edit');
    // --NOK:-- echo exec('D:/Orion7/UniServerZ/cgi-bin/extgrid.exe');
    // --NOK:-- echo exec('/cgi-bin/extgrid.exe/Provider/form_edit');
    // --NOK:-- echo exec('/cgi-bin/extgrid.exe/Provider/form_edit /Provider/form_edit');
    // --NOK:-- echo exec('D:\Orion7\UniServerZ\www\Provider\form_edit');
    // --NOK:-- echo exec('D:\Orion7\UniServerZ\cgi-bin\extgrid.exe /Provider/form_edit');
    // --NOK:-- echo exec('D:\Orion7\UniServerZ\cgi-bin\extgrid.exe Provider form_edit');


    Cordialement.
    Images attachées Images attachées

  2. #2
    Membre confirmé Avatar de devEric69
    Homme Profil pro
    Dév. Lazarus & C++, Php - Windows & Ubuntu
    Inscrit en
    Novembre 2012
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Dév. Lazarus & C++, Php - Windows & Ubuntu
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 74
    Par défaut
    Ça marche depuis l'URL, donc.
    Et bien oui et non: c'est plus compliqué que cela en fait, à cause du relai\common gateway Apache-GET<-->Apache-CGI!
    Voici ce que j'ai finalement trouvé sur le terrenet:


    1°) le contexte CGI est comme un environnement DOS\terminal Bash. On passe les paramètres CGI à un programme CGI par des variables d'environnement CGI. Par ex., il faut écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    putenv('REQUEST_METHOD=GET');
    // to get your parameters passed into the cgi..
    $_SERVER['PATH_INFO'] = '/Provider/form_edit';
    putenv('PATH_INFO=' . $_SERVER['PATH_INFO']);
    $sOutput = exec('D:\Orion7\UniServerZ\cgi-bin\extgrid.exe');
    echo $sOutput;
    2°) la routine Php exec ne renvoie que le texte qui suit le dernier retour charriot (ASCII code 10 = LF ; Line feed ) du texte brut ou text-html renvoyé par le binaire CGI.
    Dit autrement, si un programme CGI Pascal ou Php renvoie un, des #10 ou "\n", alors tout ce qui précède le dernier "\n" ne sera pas relayé par exec dans la sortie stdOUT du serveur Apache (j'image, je ne suis pas allé voir exactement le code C qui interprète cette fonction), qui ne renvoie donc pas grand chose.

    Donc, il faut que le programme CGI renvoie une seule grande chaîne (avec une remplacement de chaque "\n" par un caractère neutre, ou une regex twig neutre) et dans le script Php qui récupère la sortie de la fonction Php, écrire l'inverse i.e. remplacer les caractères neutres, ou les regex twig neutres, par des "\n afin d'avoir un code html un peu plus lisible dans le navigateur.

    (Après, il faut aussi que je lise les RFC sur la sécurité de ce passage de variables CGI côté serveur, pour savoir s'il y a des failles de sécurités et comment les combler.)

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

Discussions similaires

  1. executer un script php sous windows sans wamp
    Par piratack007 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 14/04/2011, 12h53
  2. [EasyPHP] Comment programmer l'exécution d'un script php ?
    Par onlytime dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 29/03/2008, 19h56
  3. [Système] Programmer l'excecution d'un script PHP
    Par Landolsi dans le forum Langage
    Réponses: 2
    Dernier message: 09/02/2007, 16h30
  4. Réponses: 2
    Dernier message: 03/04/2006, 18h38
  5. Lancement d'un programme java depuis un script php
    Par gexti dans le forum Développement Web en Java
    Réponses: 8
    Dernier message: 07/05/2004, 17h40

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