RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
'PHP5'에 해당되는 글 2
php 5.2.x버전 이상에서는 [--with-oci8=]이라는 configure 옵션에는 있지만 먹히지 않는 기묘한 현상을 보인다.

결국 뒤져본 결과 참으로 허탈한 답변을 구할 수 있었다.

first read what i wrote about:
I'm telling not about oracle8, but about oracle9 and oracle10.

extension name is OCI8 , but it used for oracle from 8 to 10
NOT ONLY TO ORACLE 8 (!)

------------------------------------------------------------------------

[2007-08-28 11:14:58] [EMAIL PROTECTED]

We don't support Oracle 8 anymore. :)

------------------------------------------------------------------------

그래 뭐.. 버전이 업데이트가 많이 된 상황이니 지원을 안 할 수도 있겠지..
라고 생각하고 다음 코멘트를 봤다.

[10 May 8:05pm UTC] tony2001@php.net

Upgrade to newer Oracle version.


OTL ...  새걸로 업그레이드 해라. 말이 업그레이드지...
그게 맘대로 되는 것이더냐!

구글신의 힘을 빌어 뒤져 본 결과.
역시나 방법(편법)이 있었다!

오류내용)
/usr/local/src/php-5.2.3/ext/oci8/oci8_lob.c:304: error:
`OCI_NLS_CHARSET_MAXBYTESZ' undeclared (first use in this function)
/usr/local/src/php-5.2.3/ext/oci8/oci8_lob.c:304: error: (Each
undeclared identifier is reported only once
/usr/local/src/php-5.2.3/ext/oci8/oci8_lob.c:304: error: for each
function it appears in.)
make: *** [ext/oci8/oci8_lob.lo] Error 1

해결법)
일단 php 5.2.x 버전의 압축을 풀고 그 디렉토리로 이동한다. 아래 파일을 수정해 준다.

# vi ext/oci8/oci8_lob.c
그리고 아래와 같이 되어 있는 줄을 찾는다.

▶수정 전(약 303번째줄)

=======================================
        if (is_clob) {
                PHP_OCI_CALL_RETURN(connection->errcode, OCINlsNumericInfoGet, (connection->env, connection->err, &bytes_per_char, OCI_NLS_CHARSET_MAXBYTESZ));
 
                if (connection->errcode != OCI_SUCCESS) {
                        php_oci_error(connection->err,connection->errcode TSRMLS_CC);
                        PHP_OCI_HANDLE_ERROR(connection,connection->errcode);
                        return 1;
                }
        } else {
                /* BLOBs don't have encoding, so bytes_per_char == 1
*/
        }
 =======================================

▶수정 후(색칠 된것을 추가)

=======================================
        if (is_clob) {
#ifdef OCI_NLS_CHARSET_MAXBYTESZ
                PHP_OCI_CALL_RETURN(connection->errcode, OCINlsNumericInfoGet, (connection->env, connection->err, &bytes_per_char, OCI_NLS_CHARSET_MAXBYTESZ));
 
                if (connection->errcode != OCI_SUCCESS) {
                        php_oci_error(connection->err,connection->errcode TSRMLS_CC);
                        PHP_OCI_HANDLE_ERROR(connection,connection->errcode);
                        return 1;
                }
#else
                bytes_per_char = 4;
#endif
        } else {
                /* BLOBs don't have encoding, so bytes_per_char == 1
*/
        }
 =======================================

이후 configure , make, make install 을 하면 된다.
Trackback
Reply
64bit OS에는 이상하게도 PHP5에 oracle client가 oci8로 도무지 붙지를 않았다.

버전의 문제인가 싶어 다른 버전으로 시도해봤지만 역시나 붙지 않는다.
자꾸 libclntsh.so파일을 찾을 수 없다고 나온다. 분명 파일도 정상적으로 링크가 되어있고
LD_LIBRARY_PATH역시 정상적으로 잡아주었는데..

결국 64bit OS의 특성인 듯하여 oracle instant Client로 대처하기로 했다.

[DOWN]
http://www.oracle.com/technology/tech/oci/instantclient/index.html

위의 URL로가서 oracle instant client를 받는다. 최신 버전은 11g이다.
난 당연히 64bit OS이기 때문에 64bit 버전을 받는다. linux의 경우에는 2개의 파일을 받자.
개인적으로 rpm 패키지 보다는 소스를 좋아하기에 소스 버전으로 받았다.

basic.zip (44,800,163 bytes) (cksum - 2302121184)
sdk.zip (607,175 bytes) (cksum - 3112907190)

두 개의 파일을 받아 압축을 풀면 /instantclient_11_1 안에 두개의 파일이 들어간다.
instantclient_11_1안에는 basic.zip의 파일내용이 nstantclient_11_1/sdk에는 sdk.zip 파일이 풀린다. 그리고 링크를 하나 걸어주어야 한다.

# ln -s libclntsh.so.11.1 libclntsh.so

oracle instant client설치는 이것으로 끝이다.
참고로 말하자면 저 디렉토리 이름을 바꾸고 LD_LIBRARY_PATH를 다 잡아주고 했는데도 PHP 컴파일시 버전을 찾지 못하는 요상한 현상이 벌어진다.(이것으로 한 3시간은 잡아 먹은듯..) 왜인지는 조금 더 두고 봐야할듯하다.

이제 php5에 올려보자.
php configure 옵션에 --with-oci8=instantclient,/data/instantclient_11_1 --enable-sigchild
를 추가한다. 주의 할 것은 php 버전에따라 instant client 설치법이 조금씩 다르다.
확인을 하려면 ./configure --help | grep oci 로 확인을 해봐야할 것이다.
PHP5 버전에서는 위와 같은 방법으로 하면 된다. /data/instantclient_11_1는 위에서 압축을 푼 디렉토리를 적어주어야 함을 명심하자.

이제 컴파일하면 별 문제없이 make, make install이 될것이다.

아 물론, network/admin/ 이란 디렉토리를 만들어서 tnsnames.ora 파일을 생성해줘야 하는 것도 잊지말자.

Trackback
Reply
우주곰:지구곰이 아닙니다.
지구곰이 아닙니다.
Categories (190)
Information (5)
About uzoogom (5)
Blah.. blah.. (5)
My Advanced Linux (73)
RedHat Knowledge (10)
Advanced Linux (47)
Virtualization (7)
HA clustering (2)
Bash shell scripts (6)
Learning Linux (96)
Fundamental (41)
AdminCourse (32)
Security (23)
OperatingSystem (5)
AIX (2)
HPUX (3)
Databases (4)
Oralce (3)
Mysql (1)
OpenSource (1)
Tips! (1)
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31