PHP sur AS400

Fermé
Tittom Messages postés 422 Date d'inscription mardi 30 mai 2000 Statut Membre Dernière intervention 10 janvier 2007 - 4 oct. 2001 à 21:46
 adil - 30 mai 2012 à 15:39
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
A voir également:

50 réponses

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.
0
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+
0
walterT Messages postés 17 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 19 février 2009
3 sept. 2008 à 10:04
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
0
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+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
0
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.
0
walterT Messages postés 17 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 19 février 2009
15 janv. 2009 à 12:02
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"));
0
djazar > walterT Messages postés 17 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 19 février 2009
15 janv. 2009 à 14:06
Merci 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
0
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
0
walterT Messages postés 17 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 19 février 2009
18 févr. 2009 à 11:52
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é?
0
djazair > walterT Messages postés 17 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 19 février 2009
18 févr. 2009 à 13:53
Merci 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";
}
?>
0
walterT Messages postés 17 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 19 février 2009 > djazair
18 févr. 2009 à 14:42
Si 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
0
djazair > walterT Messages postés 17 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 19 février 2009
18 févr. 2009 à 15:33
Ok 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;
}
0
walterT Messages postés 17 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 19 février 2009 > djazair
18 févr. 2009 à 15:38
Oui tout a fait.

A+ walter
0
Walter,

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


Merci encore
0
walterT Messages postés 17 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 19 février 2009
18 févr. 2009 à 17:17
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
0
djazair > walterT Messages postés 17 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 19 février 2009
19 févr. 2009 à 09:23
Walter, 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;
}
0
walterT Messages postés 17 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 19 février 2009 > djazair
19 févr. 2009 à 09:54
Salut,
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
0
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;
}
0
walterT Messages postés 17 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 19 février 2009
19 févr. 2009 à 12:09
Oui, mais tu m'as pas donné le résultat :)
tu as un message d'erreur?
0
djazair > walterT Messages postés 17 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 19 février 2009
19 févr. 2009 à 13:36
Non 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;
0
walterT Messages postés 17 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 19 février 2009 > djazair
19 févr. 2009 à 14:33
Fait 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.
0
Ok je vais me pencher dessus. Je te tiens au courant.
Merci encore.
0
ça vie toujours ce truc la?
Quid Php ou JAva est il facile de ce connection à l'AS400
0
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
0
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
0