[리눅스] php - mssql - freepds 확장 모듈 설치

2017. 7. 27. 14:43Server



336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

리눅스에서. 

php 소스 컴파일이 완료된 상태에서.

mssql을 사용해야하는 상황이 발생함.

phpize을 사용 해서 확장모듈로 실행함.


 - php 5.3.8기준






1. 일단 freetds 링크 확인 


freetds 선택 :  ftp://ftp.freetds.org/pub/freetds/ 


가서 다운로드 링크 복사를 한다. 


난 0.91이 안되서 0.95로 변경 했음.





2. 진행


[freetds]

wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-0.95.tar.gz

tar -zxvf freetds-0.95.tar.gz

cd freetds-0.95.tar.gz

./configure --prefix=/usr/local/freetds --with-tdsver=9.0 --disable-odbc --disable-debug --enable-msdblib

make

make install


wget으로 받은뒤,

압축 풀고,

들어가서,

configure 셋 하고,

make && make install 진행




[phpize]

cd (php-5.3.8 설치파일 있는 경로, 소스컴파일 진행했던 php 폴더)/ext/mssql경로로 진입.

/usr/local/php/bin/phpize 실행(php 설치 된 경로)



이런 에러가 뜰 수 있음.

Cannot find autoconf. Please check your autoconf installation and the

$PHP_AUTOCONF environment variable. Then, rerun this script.





[해결 방법]

m4 와 autoconf 다운로드, URL (ftp.gnu.org에서 링크 확인 - http://ftp.gnu.org/gnu/ )

# wget http://ftp.gnu.org/gnu/m4/m4-1.4.18.tar.gz

# tar -zxvf m4-1.4.18.tar.gz

# cd m4-1.4.18

# ./configure && make && make install


# wget http://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gz

# tar -zxvf m4-1.4.18.tar.gz

# autoconf-latest.tar.gz

# cd autoconf-latest

# ./configure && make && make install




다시 phpize실행.


에러가 안뜨고 버전정보가 잘 맞다면 제대로 된것 같은 느낌의 문구가 뜸.


이제 폴더 파일들을 다시 확인을 해보면 파일 갯수가 달라진것이 보이고,


./configure --with-mssql=/usr/local/freetds --with-php-config=/usr/local/php/bin/php-config

make 

make install


을 쳐주면 


.so파일이 설치 된(php설정에 따른) 폴더 경로가 보임.


그 경로로 가보면 mssql.so파일이 있음.





[ php.ini 설정 ]


그 mssql.so 파일을 php.ini 설정에 가서 로드 해야 되겠지?


extension_dir <- 확인하고.

extension=mssql.so <- 지정




[ freetds.conf 설정 ]


[global]

        # TDS protocol version

;       tds version = 5.0


        # Whether to write a TDSDUMP file for diagnostic purposes

        # (setting this to /tmp is insecure on a multi-user system)

;       dump file = /tmp/freetds.log

;       debug flags = 0xffff


        # Command and connection timeouts

;       timeout = 10

;       connect timeout = 10


        # If you get out-of-memory errors, it may mean that your client

        # is trying to allocate a huge buffer for a TEXT field.  

        # Try setting 'text size' to a more reasonable limit 

        text size = 64512


[db설정 이름]

host = 1.234.56.78

port = 1433

tds version = 8.0



난..9.0으로 설정했을때는 안되다가.. 8.0으로하니까 잘되더라.. 이건 왜그런거지... 

버전을 돌려가면서 아파치 재시작 하면서 해봐야 할듯. 

안된다고 make clean이나.. 

디렉터리 삭제나.. 

짜증나 슈바 init 6 !  하지 말고... 

시간적 여유를 갖고 해봐아... 

에러가 난다면 말이지...





[실행해봐야지 php에서 ? ]

$ms_db = "mssql 데이터베이스 이름";

$ms_server = "위에서 지정한 db설정 이름"; 혹은 아이피:포트

$ms_user = "아이디";

$ms_password = "패스워드";


  #이건 혹시나.. mssql.so가 확장모듈 로딩이 됬는지 확인하는 차원에서... 해본....것...

if(!extension_loaded('mssql')) {

dl('mssql.' . PHP_SHLIB_SUFFIX);

extension_loaded('mssql');

}


$ms_conn = mssql_connect($ms_server, $ms_user, $ms_password) or die("Couldn't connect to SQL Server on         $myServer. Error: " . mssql_get_last_message());

mssql_select_db($ms_db, $ms_conn);



난 잘되더라.. 삽질아닌 시행착오를 몇번 하니까.........




[추가]

다른서버에 다시 하니까 다른 에러가 하나 뜨던데..


php_mssql.lo error 1

php_mssql.lo 에러 1


이런식으로 끝나는

그...sqlfront.h와 관련된... 

아..에러가 기억안난다..

암튼 두번째 make를 실행할때 

LPBYTE가 어쩌구 라고 뜬다면..


다시 맨처음으로 올라가서 다운받았던 디렉터리 안에 include 안에

sqlfront.h를 수정 해주자.

라인넘버 36번째

typedef    BYTE * LPBYTE 어쩌구 에러 나는데

/* typedef    BYTE * LPBYTE */


로 주석 처리 해 주고 다시 맨처음 config 부터 다시 시작해보자. 그럼 잘된다.