PHP sur AS400

Quelqu'un a-t-il entendu parler de l'existence d'une version de PHP pour AS/400 ?

Si non, qq'un a-t-il des infos sur le portage de PHP sur une nouvelle plateforme ?

Toutes informations bienvenues...

Tittom

50 réponses

Résumé de la discussion

Le PHP est disponible sur AS/400 via PASE, et cela devient opérationnel dès la version V5R2 grâce à une recompilation facilitée, proposant un chemin d'accès stable pour les développeurs. La solution recommandée implique PHP sur iSeries en V5R2 via PASE, recompilé sans problème, avec des ressources comme mcind fournissant les éléments nécessaires pour accélérer l'adoption et la mise en production. D'autres approches existent, notamment l'utilisation d'extensions comme ibm_db2 ou l'accès via ODBC, accompagnées d'intégrations possibles telles que ZendCore sur l'AS/400 et des solutions complémentaires côté serveur. En outre, des configurations réseau comme l'utilisation d'un VPN sécurisé ou d'un serveur en DMZ permettent d'interroger l'AS/400 depuis des environnements externes tout en maintenant les données sur la plateforme.

Bobot (l’IA à votre service)
  1. A.... Donc des données sur un serveur AS400 et un logicielle type PHP sur un autre environnement et bien sur sans lien entre les deux.
    L'as400 peut travaillé en architecture 2/3 1/3 La base est sur l'as400 et le serveur est en local dans le même environnement. Donc il faudra que ton serveur oléane puisse accédez via un VPN sécurisé à ton AS400. Avec un profil dédié. A titre d'info IBM travail en partenariat avec zendcore pour l'accés à la base de données AS400 mais qu'a partie de la version5.4 si je ne me trompe pas.
    1. ça vie toujours ce truc la?
      Quid Php ou JAva est il facile de ce connection à l'AS400
      1. Salut,
        peut tu être plus précis sur ce que tu cherche comme information.
        Les deux existes sur l'AS/400 et sont relativement simple d'emplois.

        A+ Walter
      2. y a t il une manière d'appeler un pgm as400 en PHP/ zendserver avec ou sans paramètres sans commandes EASYCOM aurement dit ..........gratuit
    2. tout a fait, je n'ai rien en sortie.

      Jlavais modifié de la sorte, mais le résultat est pareil :

      /* Paramètres */
      $parm1 = "A";
      $parm2 = "23";
      $parm3 = "980065";

      $description = Array(
      array("Name"=>"CODSOC", "IO"=>I5_IN, "Type"=>I5_TYPE_CHAR, "Length"=>"10"),
      array("Name"=>"NOSECT", "IO"=>I5_IN, "Type"=>I5_TYPE_CHAR, "Length"=>"10"),
      array("Name"=>"CLIENT", "IO"=>I5_IN, "Type"=>I5_TYPE_CHAR, "Length"=>"6")

      );

      $ret = i5_program_prepare("ATASEPI/OPT010", $description);
      if (is_bool($ret) && $ret == FALSE){
      $code = I5_errno();
      $msg = I5_errormsg();
      $errorTab = I5_error();
      trigger_error("I5_program_prepare fail, ".$errorTab[2], E_USER_ERROR);
      }
      $hdlPgm = $ret;

      if ($parm1!='' && $parm2!='') {
      $parameter = Array(
      "CODSOC"=>$parm1,
      "NOSECT"=>$parm2,
      "CLIENT"=>$parm3,

      );

      $ret = i5_program_call($hdlPgm, $parameter);
      if (is_bool($ret) && $ret == FALSE){
      $code = I5_errno();
      $msg = I5_errormsg();
      $errorTab = I5_error();
      trigger_error("I5_program_call fail, ".$errorTab[2], E_USER_ERROR);
      }
      $appel = true;
      } else {
      $appel = false;
      }
      1. Oui, mais tu m'as pas donné le résultat :)
        tu as un message d'erreur?
      2. @walterTNon je n'ai aucun message d'erreur justement sur ma page Internet Explorer.
        Du coté du 400 pareil je n'ai rien.

        $appel retourn 1;
      3. @djazairFait une trace AS/400, avec la fonction i5_start_filetest ou un truc comme ça.
        mais cela veut dire que ta fonction a était correctement appelée normalement.
    3. Walter,

      Avec le script ci dessus, comment tu l'aurais écrit pour cette commande :
      CALL PGM(OPT000) PARM('A' '23' '980065')

      Merci encore
      1. la tu a 3 chaine de caractère, donc tu utilise
        array("Name"=>"op1", "IO"=>I5_OUT, "Type"=>I5_TYPE_CHAR, "Length"=>"1")

        de même pour le reste en fonction du nombre de caractère que tu as réellement déclaré dans ton programme.
        si ton premier paramètre peux prendre en fait 2 caractère tu doit mettre 2 dans la description.

        Pour le reste il suffit de remplacer avec ton programme et les paramètres d'entrée
      2. @walterTWalter, voila ce que j'ai fait...
        Ma page internet explorer ne m'affiche pas d'erreur, mais je n'ai pas de resultat. Le programme est censé alimenter mon fichier.

        Merci water

        /* Connexion */
        $jobName= array(I5_OPTIONS_JOBNAME=>'I5JOB');
        // Connexion à l'AS400
        $Hdlcon = i5_connect("IP","user", "mdp", $jobName);

        /* Paramètres */
        $parm1 = "A";
        $parm2 = "23";
        $parm3 = "980065";

        $description = Array(
        array("Name"=>"CODSOC", "IO"=>I5_IN, "Type"=>I5_TYPE_CHAR, "Length"=>"10"),
        array("Name"=>"NOSECT", "IO"=>I5_IN, "Type"=>I5_TYPE_CHAR, "Length"=>"10"),
        array("Name"=>"CLIENT", "IO"=>I5_IN, "Type"=>I5_TYPE_CHAR, "Length"=>"6")

        );

        $ret = i5_program_prepare("ATASEPI/OPT010", $description);
        if (is_bool($ret) && $ret == FALSE){
        $code = I5_errno();
        $msg = I5_errormsg();
        $errorTab = I5_error();
        trigger_error("I5_program_prepare fail, ".$errorTab[2], E_USER_ERROR);
        }
        $hdlPgm = $ret;

        if ($parm1!='' && $parm2!='') {
        $parameter = Array(
        "CODSOC"=>$parm1,
        "NOSECT"=>$parm2,
        "CLIENT"=>$parm3,

        );

        $parmOut = array("CODSOC"=>"CODSOC", "NOSECT"=>"NOSECT", "CLIENT"=>"CLIENT");
        $ret = i5_program_call($hdlPgm, $parameter, $parmOut);
        if (is_bool($ret) && $ret == FALSE){
        $code = I5_errno();
        $msg = I5_errormsg();
        $errorTab = I5_error();
        trigger_error("I5_program_call fail, ".$errorTab[2], E_USER_ERROR);
        }
        $appel = true;
        } else {
        $appel = false;
        }
      3. @djazairSalut,
        oui c'est presque ça, sauf que a priori ton programme ne modifie pas les paramètres.
        Donc pourquoi les demander en retour?
        dans ce cas il faut modifier là description pour que les paramètres soient en entrée/sortie
    4. Bonjour à tous, voila j'ai un petit problème pour l'appel d'un programme CALL
      En AS400 cela donnerai ça :
      CALL PGM(OPT000) PARM('A' '23' '980065')

      J'ai utiliser un exemple qui a été donné et essayer de remplacer les parametres. Mais ca ne fonctionne pas.

      $prog = i5_program_prepare("*PGM/OPT000");

      if(i5_program_call($prog, array('A','23','980065')))
      {$result = i5_fetch_assoc($prog);
      echo "result is ok";
      }
      else {
      echo "Program call failed";
      }

      Est ce que qq'un pourais m'aider ? C'est assez urgent.

      Merci beaucoup
      1. Salut,
        si tu utilise *PGM cela veut dire que tu as déclaré la structure d'appel avec l'outil Easycom "Stored Procedure configuration"

        L'a tu déclaré?
      2. @walterTMerci Walter d'avoir répondu,

        A vrai dire je ne sais pas du tout.
        Précédemment j'avais tenté avec une commande :
        $ret = i5_command("XASEPPRG/PRIXREVIEN", array("DE"=>$NART, "DSPOUPRT"=>"F"), array());
        Et cela a fonctionné.

        Maintenant je voudrais appeler un programme qui est le suivant :
        CALL PGM(OPT000) PARM('A' '23' '980065')

        j'ai une erreur sur l'AS400 :
        Message . . . . : Erreur de domaine d'objet ou de protection de mémoire pour
        déplacement X'0000000000000000' dans objet ZENDCOREAPQSECOFR 558180.
        Cause . . . . . : Un programme a tenté d'utiliser une instruction interdite,
        d'accéder à un objet du domaine système ou de faire un mauvais usage d'une
        page protégée. Le type de violation est 4. Le type de violation indique le
        type d'erreur. 1-Violation du domaine d'un objet 2-Violation de test TESTPTA
        (Test Pointer Target Addressability) 3-Erreur de protection en lecture

        Voici mon script.

        $adresse = "xxx.xxx.xxx.xxx";
        $user = "xxxx";
        $mdp = "xxxx";
        $jobName= array(I5_OPTIONS_JOBNAME=>'I5JOB');

        if ($user=="" || $mdp=="" || $adresse==""){
        echo "<script>alert('Vous devez configurer le fichier conn.php avec vos propriétés de connexion\\n\\nYou must edit conn.php file with your connection property');</script>";
        }

        /* Connexion */
        $Hdlcon = i5_connect($adresse,$user, $mdp, $jobName);
        $prog = i5_program_prepare("*PGM/OPT000");

        if(i5_program_call($prog, array('A','23','980065 '))) {
        $result = i5_fetch_assoc($prog);
        echo "result is ok";
        }
        else {
        echo "Program call failed";
        }
        ?>
      3. @djazairSi tu ne sais pas si tu as déclaré ton programme avec l'outil(Windows), j'aurais tendance a dire que tu ne l'a pas fait.
        Donc soit tu le fait, soit tu utilise une autre solution.

        L'autre solution est de déclarer ton programme directement en PHP, un exemple est fournis dans la documentation de Zend.
        Tu peux aussi aller sur le forum de Zend, ce cas a déjà était traité.

        A+walter
      4. @walterTOk merci Walter.

        L'autre soltion ca ne serait pas celle ci ?

        /* Paramètres */
        if (isset($_POST['param1'])) {$parm1 = $_POST['param1'];} else {$parm1 = 1;}
        if (isset($_POST['param2'])) {$parm2 = $_POST['param2'];} else {$parm2 = "";}
        if (isset($_POST['param3'])) {$parm3 = $_POST['param3'];} else {$parm3 = 3;}
        if (isset($_POST['param4'])) {$parm4 = $_POST['param4'];} else {$parm4 = "";}

        $description = Array(
        array("Name"=>"OP1", "IO"=>I5_IN, "Type"=>I5_TYPE_PACKED, "Length"=>"5.2"),
        array("Name"=>"STR1", "IO"=>I5_IN, "Type"=>I5_TYPE_CHAR, "Length"=>"20"),
        array("Name"=>"OP2", "IO"=>I5_INOUT, "Type"=>I5_TYPE_PACKED, "Length"=>"5.2"),
        array("Name"=>"STR2", "IO"=>I5_INOUT, "Type"=>I5_TYPE_CHAR, "Length"=>"30"),
        array("Name"=>"OP3", "IO"=>I5_OUT, "Type"=>I5_TYPE_PACKED, "Length"=>"10.4")
        );

        $ret = i5_program_prepare("EASYCOM/RPCSAMPLE", $description);
        if (is_bool($ret) && $ret == FALSE){
        $code = I5_errno();
        $msg = I5_errormsg();
        $errorTab = I5_error();
        trigger_error("I5_program_prepare fail, ".$errorTab[2], E_USER_ERROR);
        }
        $hdlPgm = $ret;

        if ($parm1!='' && $parm2!='') {
        $parameter = Array(
        "OP1"=>$parm1,
        "STR1"=>$parm2,
        "OP2"=>$parm3,
        "STR2"=>$parm4,
        );

        $parmOut = array("OP1"=>"OP1", "OP2"=>"OP2", "OP3"=>"OP3", "STR1"=>"STR1", "STR2"=>"STR2");
        $ret = i5_program_call($hdlPgm, $parameter, $parmOut);
        if (is_bool($ret) && $ret == FALSE){
        $code = I5_errno();
        $msg = I5_errormsg();
        $errorTab = I5_error();
        trigger_error("I5_program_call fail, ".$errorTab[2], E_USER_ERROR);
        }
        $appel = true;
        } else {
        $appel = false;
        }
    5. Bonjour à tous,

      Perso, j'utilise l'as 400 avec php pour faire mes requetes affichages ... Nikel rien a dire.
      Par contre jusqu'à présent, j'ai jamais fais appel a une commade as400.

      Est ce que qq'un peux me montrer un exemple de script de la connexion à l'appel de la fonction svp ?
      c'est vraiment URGENTISME !!! lol

      A bientot Camarade AS400 / php
      1. Le Problème est plus le but : Que veux tu faire comme commande avec L'AS400. Il est possible de passer à SQL des commande de type call programme. Tu peux aussi créer des programmes dans un langage X sur l'AS400 avec ou sans paramètres. Créer une fonction SQL qui exécute celui-ci et passe par la dite fonction pour exécuter l'ordre.
        ... etc
        Il est certain que le multiple outil du marche facilite cette objectif. Malheureusement je n'est pas d'exemple sous la main.
      2. Faudrait peut être dire quel outil tu utilise?
        Parce que la comme le dis dedalios, multiple outils le fond très bien.

        un exemple pré-mâché utilisant I5toolKit avec commande simple et avec retour de paramètres:
        $Hdlcon = i5_connect($adresse,$user, $mdp, $jobName);

        $ret = i5_command("ADDLIBLE LIB(WALTER)");

        $ret = i5_command("RTVSYSVAL", array("SYSVAL"=>"QSRLNBR"), array("RTNVAR" => "NB"));
      3. @walterTMerci Walter,

        J'ai téléchargé le kit sur easycom, c'est en effet l'exemple qui a été donné et cela m'a beaucoup servi. merci pour votre réactivité.

        Cordialement
    6. Salut, je tombe sur ce post par hasard.

      J'utilise aujourd'hui le ZendCore for I5 et le Zend Studio for i5 de la société Zend au quotidien.

      Sous le nom de ZendCore for I5 se cache en fait une distrib d'apache,Php et MySql maintenus et supportés par la sté Zend.

      ZendStudio for I5 est un IDE du tonnerre ! avec toutes les fonction rêvées afin d'accéder aux ressources de l'AS400 (programme RPG batch, clp, DB2/400, DTAARA, commande système, valeur système et tout et tout et tout

      Ces produits sont gratuits car financés par IBM, alors pas de raison de s'en priver, On peut même debugger !!!!!

      N'hésitez pas si vous désirez plus d'informations

      Désolé je n'ai pas lu tout le thread, en espérant ne pas répéter des messages précédent

      A+
      1. Salut,
        Oula, ça c'est du déterrage de thread

        >>Bon,ya eu du chemin fait depuis.
        oui en plus des outils déjà citer et utilisé avant(depuis 2005!) pour attaquer un AS/400 dans du PHP(linux/windows).
        Maintenant il y a surtout le ZendCore directement sur l'AS/400.

        Cordialement,
        Walter
        http://www.easycom-aura.com
        1. Hey les gars, on est en 2008, la 1ère question de ce sujet PHP date je crois de 2001...
          Bon,ya eu du chemin fait depuis.

          Parler PHP sur l'AS400 maintenant, on trouve : allez voir le spécialiste, PHLSOFT. Et vous savez comment ils ont appellé leur site ? Je vous le donne en mille émile : www.php400.com , pas plus ni moins !!!! Ils ont créé avant toute une suite de produits (phlweb, phlprint, ...) rien que pour l'AS400. Voir www.phlsoft.com et vous m'en direz des nouvelles.

          A+
          1. Voici un outil que j'utilise pour faire eventuellement pour faire mes tests de requete sur l'as400

            dbdesigner fork >>> https://sourceforge.net/projects/dbdesigner-fork/

            en dehors d'un moyen d'extrait les données de la base , il existe dessus un outil permettant de creer des requete sql pour AS400 et aussi pour bien d'autre SGBD.
            1. J'ai réussi à me connecter mais pas à exécuter des requêtes. je n'ai aucun retour d'erreur mais une page blanche.

              Pour typesql j'ai bien choisi SQL.
              1. dsNS SYSTEME: dsN UTILISATEUR;
                aFF Utilisateur je crois !!

                Un bon test utilise excel , et creer une requête odbc: avec ta requête SQL tu veras ce que cela donne.

                Une chose à savoir. Le profil que tu utilise pour connecter le serveur PHP à L'AS400 a t'il la liste des bib en ligne cela peut joue si tu ne qualife pas la ou les bib dans sql.

                exemple de code sql sur as400 avec qualif de bib

                Select nomcli, prenomcli from libclient/ficclient
                where agecli >=18 ;

                en odbc cela donnera plutot

                Select nomcli, prenomcli from libclient.ficclient
                where agecli >=18 ;

                Le "." (symbole point) remplace le symbole "/" antislash traditionnement utilie par defaut sur l'as..
                Attention toutefois cela détent aussi de la définition de ta connection odcb
                Qui de tête contient quelque part typesql (*sql ou *sys) ce qui fait la différence

                *sys supportera "\" et *sql "." à moins que ce soit l'inverse (peut être verifer vie strsql de L'as et ses paramètres)
                1. C'est juste pour consulter sur 1 ou 2 poste en interne.
                  Là j'ai créé la connection odbc avec client access. Par contre mon script php de connection ne fonctionne pas. Je me demande si ça vient pas du fait que j'ai créé une DNS utilisateur et non pas système. Qu'est ce que vous en pensez?

                  Sinon 800 euros dans mon site c'était juste pour une petite prestation de la SSII à savoir l'extraction d'un fichier texte de l'AS400 vers le serveur. Il reste encore à payer l'hebergement ect.
                  1. A une question tout de même existe, les informations à mettre a disposition le seront il en interne ou cela doit il être consultable via interne via l'extérieur?
                    Selon la réponse la sécurité n'est pas réellement la même et ce qui doit être mise en place non plus. Dans le cas d'un intranet , comme tu es dans le réseau local pas de problème majeur . Dans le cas d'un extranet il faut une liaison loué sécurisé car on peut supposé que la société ne tien pas à ca que tous utilisateur d'internet farfouille dans ces fichiers de compta, dans ses projet de réalisation technique ....etc(Et la 800€ bien .glups... ca va pas suffir)

                    Pour ma part les stat que je créer tourne via ODBC avec excel et on peut faire pas mal de chose avec .

                    Autre chose: il est possible de créer dans la base de donnée AS400 des fonctions SQL (ou avec d'autre langage) que tu peux appelé dans tes SQL. De cette façon c'est L'as400 qui mouline et pas le serveur.

                    La mise en place d'un site internet pour 800€ , hoho je trouve que c'est très très peu chère. une bouchée de pain face à ce qui existe sur le marché.
                    1. Moi je sais exactement ce que j'ai à faire. Après il y aura peut être des évolutions à apporter dans le futur mais ça ne sera pas moi qui m'en chargerai. Il y a déjà un petit programme en JAVA pour les stats clients et j'aurai voulu continuer sur ce programme pour effectivement limiter les interfaces, mais je pense pas avoir le niveau.

                      Cela dit, si il y a des évolutions, ils pourront toujours continuer à partir de mon programme ou celui en JAVA.

                      Merci pour ta réponse en ce qui concerne la sécurité, bien évidemment je ferai en sorte que les utilisateurs se log.
                      1. Je sais que des fois il faut payer mais je viens de recevoir un devis de + de 800euros pour mon premier projet de stage. Même si c'est pas énorme pour l'entreprise, je me vois pas dire à mon patron qu'il faut payer encore 800 3jours après pour le 2ème projet...

                        Client access est installé sur tous les postes, c'est même moi qui l'ai installé sur les nouveaux ordis. Je pense que je vais rester sur l'idée:

                        - easyPHP en local avec connection odbc grace à client access. ça me parait être le plus simple.
                        Le programme doit uniquement fonctionner sur 2 ordinateurs, c'est pas très contraignant d'installer easyPHP sur les deux.


                        Si quelqu'un a des conseilles au niveau de la sécurité des informations avec cette méthode, je suis preneur.
                        Parce que dans l'entreprise, ils y connaissent rien, ils me laissent tout faire mais ils se rendent pas compte qu'il y a certains risques quand même.
                        1. Il serait peut être judicieu que tu connaisse dans les grandes lignes, les futures projets que tu va devoir mener.
                          Pour valider ta solution 3 tiers par interface WEB et savoir si elle sera adapter au autres projets.
                          Car si les utilisateurs finaux doivent jongler avec plusieurs interface, cela n'est pas forcement très productif et la perte en temps s'élévera a bien plus de 800€.

                          Coté sécurité, il y a pas grand chose, puisque la major partie et au niveau de ton réseau local.
                          Après, il ne reste que ce que je t'ai dis précédement, c'est à dire si tu met un utilisateur en dure dans tes scripts, que celui-ci ne puisse faire que de la consultation.
                          Le mieux étant de faire se logger tes utilisateurs, dans ce cas tu n'aurra pas de problème de sécurité lié à ton serveur WEB.

                          Cordialement,
                          Walter
                          www.easycom-aura.com
                      2. Comme bon nombre l'on dit avant moi pour accéder à l'as400 il suffit d'un poste connectable à cette AS400 et un profil utilisateur qui accés au données. Par ODBC on accède à L'AS400 via par exemple Client_Access qui est trés répendu.

                        Apres c'est simple Les requetes sql qui vont bien et soit on charge la base sql pour renforcé la sécurite soit on constution la page avecl les données récupere directement à partie de L'AS400.

                        Attention pour utiliser ZendCore ( effectivement gratuit ou 300€ je sais plus trop) il faut une version AS400 : V5R4 minimun voir meme la version V6.0 qui vient juste de sortir.
                        1. Salut,
                          Pour ZendCore il faut au minimum une V5R3.
                          300€ je crois que c'est surtout pour l'abonnement au support Zend, puisque vous avez déjà téléchargé le produit.

                          Après dans une architecture 3 tiers, la sécurité est établit avant tout par l'utilisation d'un utilisateur ne possédant que les droits necéssaire à l'application, au cas ou il y aurait une utilisation de celui pour faire d'autre requete que celle prévus.
                          Puis par le non access à l'AS/400 en directe.

                          On peut installer un wamp(ou autre) dans "l'IFS", mais surtout faire tourner Apache dans un environnement PASE.
                          Il suffit de compiler ou d'avoir un pré-compiler pour AIX et d'executer Apache dans l'environnment PASE.
                          C'est que fait le produit ZendCore.

                          Le plus simple étant quand même d'installer ZendCore, car la compilation/installation du couple Apache/PHP sur PASE est réservé à des personnes connaissant bien l'AS/400 et AIX.

                          Cordialement,
                          Walter
                          www.easycom-aura.com
                      3. De croire que tout est gratuit me semble absurde.

                        Il n'empêche il est possible d'installer une version de wamp dansL'iFS ou sur un pc qui à accés L'as400. l'accés au données de l'aS00 VIA obdc ou DB2.

                        Aprés le problème est la sécurité des données de l'AS 400.
                        1. As tu acces facilement à une console 5250 avec les droits QSECOFR? 


                          désolé mais je peux pas te répondre, je pige rien. Faut que je tape QSECOFR sur l'AS400?

                          Zendcore c'est payant? Si cette solution demande des investissements, va falloir que j'en choisisse une autre!

                          Je sais pas si DB2connect est installé, mais si il y ait pas d'origine, je suis sur que personne ne l'a installé.
                          1. QSECOFR c'est le login administrateur de ton AS/400.
                            ZendCore est gratuit, regarde chez zend pour plus d'informations.
                            Mais pour cela il faut que tu ais les droits d'administration de ton AS/400.

                            IBM DB2 Connect s'installe lorsque ton serveur WEB/PHP n'est pas sûr l'AS/400.
                            Et il s'installe sur ce serveur WEB, donc pas besion de connaissance/droit AS/400.
                            Mais par contre il est payant, je croix. Peut il y a t-il des substitu gratuis.

                            Après si tu veux que cela soit gratuit, le plus simple c'est de passer par ODBC.
                            Sur Windows il y a driver ODBC dans client access(je sais pas si c'est gratuit), sinon il en existe un sous Linux.

                            Cordialement,
                            Walter
                            www.easycom-aura.com
                        • 1
                        • 2
                        • 3