PHP -

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; 

는 $의 my_var이 값을 가지고 EBCDIC을 ASCII로 변환 | - |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를 호출 ... 내가 메시지를 다시 : 프로 시저 lmtlib artest에서 지정된 매개 변수를 찾을 수 없습니다. – 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

여러분이 직접 작성해야하는 변환 함수를 작성할 수 있습니다. 웹에는 EBCDIC W ASCII 테이블이 있습니다. –

2

이 여러 시스템에서 우리를 위해 노력하고 있습니다 (IBM 내가 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; 

} 

?>