PHP -

2012-05-08 4 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; 

は、$のMY_VARが値を持つASCIIにEBCDIC変換| - |PHP -

すごい戻っていると呼ばれているテストRPGLEプログラム

プログラムが変更されると、私が戻ってくる文字は違うので...私はプログラムから価値を取り戻していることを知っています。唯一の問題は、これらの文字をEBCDICからASCIIに変換する方法です。


私は、以下のものを使用して試してみました編集

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

しかし、私はこのエラーを取得: "間違った文字セットを、からの変換" ASCIIにEBCDICが

"許されません"

そして、「間違った文字セット、cp037からasciiへの変換は許可されていません」

答えて

1

ご使用のCREATE PROCEDUREステートメントで、ご使用の言語に適合するCCSIDを使用してください。米国英語の場合、それは、37例のようになります。

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

ccsid 37を指定すると、 SPを呼び出す...私はメッセージを返す:artestのプロシージャlmtlibは、指定されたパラメータで見つかりませんでした。 – adam

+1

パラメータは正確に一致する必要があります。私が投稿したプロシージャは、あなたが投稿したPHPコードによって呼び出されたときに動作します。私は手順でvarcharを使い、RPGを変えました。ここでV5R4。 –

+0

私たちがCHARACTER(4)を実行し、VARCHAR(4)を実行した場合、それは私が見ている問題を引き起こすでしょうか?私のディレクターは私に私がこれを私自身でテストできるようにプロシージャを作成するためのアクセス権を得ています。そして、私はより良いフィードバック/応答を提供することができます:) – adam

1

私たちは、 e以下のPHP関数:

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

をこれをしなければなりませんでした。 "定義されていない関数 'recode_string'を呼び出す – adam

+0

PHPマニュアルでは、recode_stringはPHP 4とPHP 5の一部であると言います。 –

+0

自分で変換関数を記述することができます。 WebにはEBCDICとASCIIテーブルがあります。 –

2

これは、複数のシステム上で私たちのために働いている(IBM iのV7R1、PHPバージョン5.4.16):

$ ascii_value =のiconv( "IBM- 1047 "、" ISO8859-1 "、$ ebcdic_value); // EBCDIC-> ASCII変換

ASCII

に機能EBCDICに建て

0

私は、私は残念ながらその機能を持っていけないウィンドウ環境で

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; 

} 

?>