2012-05-08 3 views
0
$my_var = "1"; 

$connection = db2_connect ("*LOCAL", "ISCSC", "ISCSC"); 

$strSql = 'CALL LMTLIB.ARTEST(?)'; 

$stmt = db2_prepare ($connection, $strSql); 

db2_bind_param($stmt, 1, "my_var", DB2_PARAM_INOUT, DB2_CHAR); 

$rc = db2_execute ($stmt); 

echo $my_var; 

Lorsque ce bloc de code exécute, my_var de $ a la valeur |-|php - convertir ebcdic en ascii

Le programme RPGLE de test étant appelé est de retour wow

Lorsque le programme est modifié, le les personnages que je reviens sont différents ... donc je sais que je récupère des valeurs du programme. Le seul problème est de savoir comment convertir ces caractères d'EBCDIC en ASCII.


modifier

J'ai essayé d'utiliser les éléments suivants:

mb_convert_encoding($my_var, "ASCII", "cp037"); 
mb_convert_encoding($my_var, "ASCII", "EBCDIC"); 
iconv("cp037", "ASCII", $my_var); 
iconv("EBCDIC", "ASCII", $my_var); 

Mais je reçois cette erreur: "Faux charset, conversion de" ebcdic à ascii "n'est pas autorisé"

Et, "Mauvais jeu de caractères, la conversion de" cp037 en ascii "n'est pas autorisée"

Répondre

1

Sur votre instruction CREATE PROCEDURE, utilisez le CCSID qui correspond à votre langue. Pour l'anglais américain, ce serait 37. Exemple:

CREATE PROCEDURE buck.phptest(   
inout parm_inout varchar (5) ccsid 37) 
LANGUAGE RPGLE       
NOT DETERMINISTIC      
CALLED ON NULL INPUT     
EXTERNAL NAME buck.phptest    
PARAMETER STYLE GENERAL     
+0

Lorsque nous spécifions ccsid 37, et j'essaie appeler le SP ... je reçois un message: procédure lmtlib dans artest pas trouvé avec les paramètres spécifiés. – adam

+1

Les paramètres doivent correspondre exactement. La procédure que j'ai publiée fonctionne quand elle est appelée par le code PHP que vous avez posté. J'ai utilisé varchar dans la procédure et variant dans le RPG. V5R4 ici. –

+0

donc si nous avons fait CHARACTER (4), et vous avez fait VARCHAR (4), cela causerait le problème que je vois? Notre directeur m'obtient l'accès pour créer des procédures afin que je puisse examiner ceci par moi-même. Et alors je serai capable de fournir de meilleurs commentaires/réponses :) – adam

1

e la fonction PHP suivante:

$recoded = recode_string ('EBCDIC..ASCII', $my_var); 
+0

je ne pas avoir cette fonction malheureusement. "Appel à la fonction indéfinie" recode_string "" – adam

+0

Le manuel PHP dit recode_string fait partie de PHP 4 et PHP 5. –

+0

Je suppose que si vous devez, vous pouvez écrire votre propre fonction de transformation. Il existe des tables EBCDIC et ASCII sur le Web. –

2

Cela fonctionne pour nous sur plusieurs systèmes (IBM i v7r1, version PHP 5.4.16):

$ ascii_value = iconv ("IBM- 1047 "," ISO8859-1 ", $ ebcdic_value); // EBCDIC-> conversion ASCII

0

construit en fonction EBCDIC en ASCII

je devais le faire dans un environnement de fenêtre

function ebcdic_to_ascii($ebcdic_hexstring /*expecting something like F0F1....*/) 
    { 
     //need to delcare it to avoid warning 
$ebcd_ascii= null; 
    // here come all the conversion 
$ebcd_ascii["4A"] = "¢"; 
$ebcd_ascii["4B"] = "."; 
$ebcd_ascii["4C"] = "<"; 
$ebcd_ascii["4D"] = "("; 
$ebcd_ascii["4E"] = "+"; 
$ebcd_ascii["4F"] = "|"; 
$ebcd_ascii["5A"] = "!"; 
$ebcd_ascii["5B"] = "$"; 
$ebcd_ascii["5C"] = "*"; 
$ebcd_ascii["5D"] = ")"; 
$ebcd_ascii["5E"] = ";"; 
$ebcd_ascii["5F"] = "¬"; 
$ebcd_ascii["60"] = "-"; 
$ebcd_ascii["61"] = "/"; 
$ebcd_ascii["6A"] = "¦"; 
$ebcd_ascii["6B"] = ","; 
$ebcd_ascii["6C"] = "%"; 
$ebcd_ascii["6D"] = "_"; 
$ebcd_ascii["6E"] = ">"; 
$ebcd_ascii["6F"] = "?"; 
$ebcd_ascii["79"] = "`"; 
$ebcd_ascii["7A"] = ":"; 
$ebcd_ascii["7B"] = "#"; 
$ebcd_ascii["7C"] = "@"; 
$ebcd_ascii["7D"] = "'"; 
$ebcd_ascii["7E"] = "="; 
$ebcd_ascii["7F"] = " '' "; 
$ebcd_ascii["81"] = "a"; 
$ebcd_ascii["82"] = "b"; 
$ebcd_ascii["83"] = "c"; 
$ebcd_ascii["84"] = "d"; 
$ebcd_ascii["85"] = "e"; 
$ebcd_ascii["86"] = "f"; 
$ebcd_ascii["87"] = "g"; 
$ebcd_ascii["88"] = "h"; 
$ebcd_ascii["89"] = "i"; 
$ebcd_ascii["91"] = "j"; 
$ebcd_ascii["92"] = "k"; 
$ebcd_ascii["93"] = "l"; 
$ebcd_ascii["94"] = "m"; 
$ebcd_ascii["95"] = "n"; 
$ebcd_ascii["96"] = "o"; 
$ebcd_ascii["97"] = "p"; 
$ebcd_ascii["98"] = "q"; 
$ebcd_ascii["99"] = "r"; 
$ebcd_ascii["A1"] = "~"; 
$ebcd_ascii["A2"] = "s"; 
$ebcd_ascii["A3"] = "t"; 
$ebcd_ascii["A4"] = "u"; 
$ebcd_ascii["A5"] = "v"; 
$ebcd_ascii["A6"] = "w"; 
$ebcd_ascii["A7"] = "x"; 
$ebcd_ascii["A8"] = "y"; 
$ebcd_ascii["A9"] = "z"; 
$ebcd_ascii["C0"] = "{"; 
$ebcd_ascii["C1"] = "A"; 
$ebcd_ascii["C2"] = "B"; 
$ebcd_ascii["C3"] = "C"; 
$ebcd_ascii["C4"] = "D"; 
$ebcd_ascii["C5"] = "E"; 
$ebcd_ascii["C6"] = "F"; 
$ebcd_ascii["C7"] = "G"; 
$ebcd_ascii["C7"] = "H"; 
$ebcd_ascii["C9"] = "I"; 
$ebcd_ascii["D0"] = "}"; 
$ebcd_ascii["D1"] = "J"; 
$ebcd_ascii["D2"] = "K"; 
$ebcd_ascii["D3"] = "L"; 
$ebcd_ascii["D4"] = "M"; 
$ebcd_ascii["D5"] = "N"; 
$ebcd_ascii["D6"] = "O"; 
$ebcd_ascii["D7"] = "P"; 
$ebcd_ascii["D8"] = "Q"; 
$ebcd_ascii["D9"] = "R"; 
$ebcd_ascii["E0"] = "\\"; 
$ebcd_ascii["E2"] = "S"; 
$ebcd_ascii["E3"] = "T"; 
$ebcd_ascii["E4"] = "U"; 
$ebcd_ascii["E5"] = "V"; 
$ebcd_ascii["E6"] = "W"; 
$ebcd_ascii["E7"] = "X"; 
$ebcd_ascii["E8"] = "Y"; 
$ebcd_ascii["E9"] = "Z"; 
$ebcd_ascii["F0"] = "0"; 
$ebcd_ascii["F1"] = "1"; 
$ebcd_ascii["F2"] = "2"; 
$ebcd_ascii["F3"] = "3"; 
$ebcd_ascii["F4"] = "4"; 
$ebcd_ascii["F5"] = "5"; 
$ebcd_ascii["F6"] = "6"; 
$ebcd_ascii["F7"] = "7"; 
$ebcd_ascii["F8"] = "8"; 
$ebcd_ascii["F9"] = "9"; 
$ebcd_ascii["FF"] = "E0"; 
    //end of conversion 

    // loop until there is no more conversion. 
    $asciiOut = "";  
    while(strlen($ebcdic_hexstring)>1)//F0F1F2F3F -> F1F2F3F 
    { 
     $thisEbcdic = substr($ebcdic_hexstring, 0, 2);//F0->F1 
     //if(!is_null($ebcd_ascii[$thisEbcdic])) 
     $asciiOut = $asciiOut.$ebcd_ascii[$thisEbcdic];//0->01 
     $ebcdic_hexstring = substr($ebcdic_hexstring, 2);//F1F2F3F -> F2F3F 
    }  

    return $asciiOut; 

} 

?> 
Questions connexes