1. 개요
본 문서에서는Linux 홖경에서 PHP와 ODBC를 연동하는 방법에 대해 기술합니다.
2. 설명
PHP를 설치하고 Tibero에서 제공하는 ODBC 라이브러리를 통해 PHP에서 Tibero에 접속하는 방법입니다.
(아파치 설정 제외)
2.1 OS User 설정
Tibero에 연결하기 위해서는 Tibero에서 제공되는 ODBC 라이브러리가 필요하기 때문에 Tibero 설치 또는 Tibero Client가 필요합니다. Tibero 설치 또는 TiberoClinet 설치는 다른 자료가 많이 있으므로 생략합니다. Tibero에서 제공되는 ODBC 라이브러리를 사용하기 위해서는 PHP를 설치하는 OS User의 profile에 다음의 환경변수 를 설정해야 합니다.
export TB_HOME=/home/tibero/tibero5
export LD_LIBRARY_PATH=$TB_HOME/lib:$TB_HOME/client/lib:$LD_LIBRARY_PATH
단, Tibero가 설치되어 있는 서버에 OS User만 추가하는 경우에는 기존 Tibero가 설치되어 있는 경로로 설정하고 권한을 부여해야 합니다.
2.2 PHP 다운
다음의 Site에서 환경에 맞는 PHP 바이너리를 다운 받습니다.
http://www.php.net/downloads.php
PHP: Downloads
Current Stable PHP 8.2.3 (Changelog) php-8.2.3.tar.gz (sig) [19,657Kb] 14 Feb 2023 7c475bcbe61d28b6878604b1b6f387f39d1a63b5f21fa8156fd7aa615d43e259 php-8.2.3.tar.bz2 (sig) [15,268Kb] 14 Feb 2023 87bb58865f38f5e2941813029152cea2102fe2961bb4d68b88f831ddd0548
www.php.net
2.3 PHP 설치
다운받은 PHP 바이너리를 서버에 업로드 하고 압축을 해제하면(tar -xvzf) php-x.x.x 라는 디렉토리가생성됩니다. php-x.x.x디렉토리는php버젼마다 다르게 생성됩니다. 해당 디렉토리로 이동 후 다음 3가지 파일을 수정합니다.
1)php-x.x..x/ext/odbc/php_odbc.h
-defined(HAVE_CODBC) 옵션 추가
2)php-x.x..x/ext/odbc/php_odbc_includes.h
사진에 나와있는 line 에 있는 설정 값을 변경합니다. 2군데 변경하시면 됩니다.
- odbc.h->sqlcli.h로 변경
- defined(HAVE_CODBC) 옵션 추가
3)php-x.x..x/ext/odbc/php_odbc.c
- defined(HAVE_CODBC) 옵션 추가
위의 3파일을 모두 수정하였으면 다음의 환경변수를 설정합니다.
export CUSTOM_ODBC_LIBS=-ltbodbc
위의 환경변수는 설치시만 필요한 환경변수 이므로 OS User의 profile에 설정할 필요는 없습니다.
환경변수설정까지 완료 된 후 다시 php-x.x.x디렉토리로 이동 후 configure를 수행합니다.
단, 이전에 php를 설치한 이력이 있다면 make distclean을 통해 기존의 설정을 모두 초기화 해주어야 합니다.
configure 수행 옵션은 다음과 같습니다.
./configure --with-custom-odbc=$TB_HOME/client
또는
./configure --with-custom-odbc=$TB_HOME/client --prefix=설치하고싶은위치
OS가 minimum 모드로 설치되어 있는 경우라면configure를 수행하는 도중 다음과 같은 오류가 발생 할 수 있습니 다.
1) gcc 패키지 미설치
root 계정으로 gcc 패키지를 설치하여 해결합니다.
2) libxml 패키지 미설치
이 역시 root 계정으로libxml 패키지를 설치하여 해결합니다.
3) sqlite 패키지 미설치
이 역시 root 계정으로 sqlite패키지를 설치하여 해결합니다.
4) Don’t know 오류 발생
위의 오류가 발생할 경우 configure를 수행할 때 다음의 옵션을 추가하여 수행하면 해결됩니다.
./configure --with-custom-odbc=$TB_HOME/client--prefix=/home/test/php--enableopcache=no
다음은 정상적으로 configure가 수행 완료 되었을 때 출력되는 화면입니다.
Thankyou 메시지를 확인 할 수 있습니다.
2.3 컴파일 및 설치
configure까지 정상적으로 수행되었다면 다음은 make 명령어를 통해 compile을 하고 make install 명령어를 통해 php 설치를 완료할 수 있습니다.
$make
$make install
정상적으로 make가 다 끝난 화면(make는 다른 작업에 비해 많은 시간이 소요됩니다. 약 5분정도 소요)
Make 과정시 에러발생할 경우 환경변수 설정이 잘되어 있는지 확인해야 합니다.
make install까지 모든 작업이 정상적으로 완료된 화면
Make install 시 권한 거부 발생할 수 있습니다. 하나씩 권한 주시면서 해결하고 진행하시면 됩니다.
2.4 연동 테스트
테스트를 위한 test.php 파일을 생성합니다.
<?
$sid = "TIBERO1";
$user = "TEST01";
$password = "tibero";
$connect = odbc_connect($sid, $user, $password);
echo "Tibero Connect Success\n";
$sql = "select * from TEST01.emp";
$exec = odbc_exec($connect, $sql);
while($row=odbc_fetch_array($exec))
{
echo "EMPNO = ".$row['EMPNO']."\n";
echo "ENAME = ".$row['ENAME']."\n";
echo "JOB = ".$row['JOB']."\n";
echo "HIREDATE = ".$row['HIREDATE']."\n";
echo "SAL = ".$row['SAL']."\n";
echo "\n";
}
odbc_close($connect);
echo "TiberoDisConnect Success\n";
?>
위에서 생성한 test.php 파일은 다음의 php 명령을 통해 콘솔에서 바로 확인 할 수 있습니다.
php test.php
테스트에 앞서 사전에 test.php에 맞는 Tibero 접속 정보를 확인해야 하며 테스트용 테이블이 미리 생성되어 있어야 합니다.
테스트용 테이블 생성 쿼리
CREATE TABLE emp
(
empno NUMBER(4) NOT NULL,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2),
CONSTRAINT emp_pk PRIMARY KEY (empno)
);
COMMENT ON TABLE emp IS '사원정보';
COMMENT ON COLUMN emp.empno IS '사원번호';
COMMENT ON COLUMN emp.ename IS '성명';
COMMENT ON COLUMN emp.job IS '직군';
COMMENT ON COLUMN emp.mgr IS '직속상사';
COMMENT ON COLUMN emp.hiredate IS '입사일';
COMMENT ON COLUMN emp.sal IS '급여';
COMMENT ON COLUMN emp.comm IS '보너스';
COMMENT ON COLUMN emp.deptno IS '부서코드';
INSERT INTO emp VALUES(7839, 'KING', 'PRESIDENT', NULL, TO_DATE('1981-11-17', 'yyyy-mm-dd'), 5000, NULL, 10);
INSERT INTO emp VALUES(7698, 'BLAKE', 'MANAGER', 7839, TO_DATE('1981-05-01', 'yyyy-mm-dd'), 2850, NULL, 30);
INSERT INTO emp VALUES(7782, 'CLARK', 'MANAGER', 7839, TO_DATE('1981-06-09', 'yyyy-mm-dd'), 2450, NULL, 10);
INSERT INTO emp VALUES(7566, 'JONES', 'MANAGER', 7839, TO_DATE('1981-04-02', 'yyyy-mm-dd'), 2975, NULL, 20);
INSERT INTO emp VALUES(7788, 'SCOTT', 'ANALYST', 7566, TO_DATE('1987-04-19', 'yyyy-mm-dd'), 3000, NULL, 20);
INSERT INTO emp VALUES(7902, 'FORD', 'ANALYST', 7566, TO_DATE('1981-12-03', 'yyyy-mm-dd'), 3000, NULL, 20);
INSERT INTO emp VALUES(7369, 'SMITH', 'CLERK', 7902, TO_DATE('1980-12-17', 'yyyy-mm-dd'), 800, NULL, 20);
INSERT INTO emp VALUES(7499, 'ALLEN', 'SALESMAN', 7698, TO_DATE('1981-02-20', 'yyyy-mm-dd'), 1600, 300, 30);
INSERT INTO emp VALUES(7521, 'WARD', 'SALESMAN', 7698, TO_DATE('1981-02-22', 'yyyy-mm-dd'), 1250, 500, 30);
INSERT INTO emp VALUES(7654, 'MARTIN', 'SALESMAN', 7698, TO_DATE('1981-09-28', 'yyyy-mm-dd'), 1250, 1400, 30);
INSERT INTO emp VALUES(7844, 'TURNER', 'SALESMAN', 7698, TO_DATE('1981-09-08', 'yyyy-mm-dd'), 1500, 0, 30);
INSERT INTO emp VALUES(7876, 'ADAMS', 'CLERK', 7788, TO_DATE('1987-05-23', 'yyyy-mm-dd'), 1100, NULL, 20);
INSERT INTO emp VALUES(7900, 'JAMES', 'CLERK', 7698, TO_DATE('1981-12-03', 'yyyy-mm-dd'), 950, NULL, 30);
INSERT INTO emp VALUES(7934, 'MILLER', 'CLERK', 7782, TO_DATE('1982-01-23', 'yyyy-mm-dd'), 1300, NULL, 10);
테스트 유저도 생성 및 권한이 들어가 있어야합니다.
'DB > Tibero' 카테고리의 다른 글
[Tibero] External Procedure(JEPA, EPA) 안내서 (0) | 2023.03.02 |
---|---|
[Tibero] Driver(ODBC, OLE DB, JDBC, ESQL)연결 가이드 (0) | 2023.02.20 |
[Tibero] RawDevice + TAC 설치 하는법 (1) | 2023.02.02 |
[Tibero] tbexport & tbimport (1) | 2023.02.01 |
[Tibero] tbExport/tbImport (0) | 2023.02.01 |