[리눅스서버] Centos 6.x + php5.x 에서 mssql 서버 연동방법
리눅스의 Apache + PHP 구조에서 MS-SQL 데이터베이스를 사용하는 방법입니다.
※ 참고2
mssql 2008 의 경우 옵션을 제외해도 됩니다.
mssql 2005 의 경우 --with-tdsver=8.0
mssql 2000 의 경우 --with-tdsver=8.0
mssql 7.0 의 경우 --with-tdsver=7.0
mssql 6.0 의 경우 --with-tdsver=4.2
# make
# make install
Freetds 를 설치했으면 PHP 를 재컴파일 합니다.
PHP 를 재 컴파일 할때 아래 옵션을 주어 컴파일 하도록 합니다. 설치방법은 생략합니다.
--with-sybase=/usr/local/freetds --with-mssql=/usr/local/freetds
재컴파일이 불편하다면 아래와 같이 별도로 모듈만 삽입 할수 있습니다.
# cd /usr/local/src/php-5.2.9/ext/mssql
# /usr/local/php/bin/phpize
# ./configure --with-mssql=/usr/local/freetds --with-php-config=/usr/local/php/bin/php-config
# make
# make install
# cd /usr/local/src/php-5.2.9/ext/pdo_dblib
# /usr/local/php/bin/phpize
# ./configure --with-pdo-dblib=/usr/local/freetds --with-php-config=/usr/local/php/bin/php-config
# make
# make install
# mv /usr/local/php/lib/php/extensions/no-debug-zts-20060613/* /usr/local/php/lib/
# /usr/local/Zend/etc/php.ini
아래 내용 추가합니다.
extension=mssql.so
extension=pdo_dblib.so
만약에 안되면 절대 경로지정
extension=/usr/local/php/lib/mssql.so
extension=/usr/local/php/lib/pdo_dblib.so
2. 설정
아래 파일을 수정하여 한글 깨짐을 막고 해당 서버로 연결가능하도록 추가 설정합니다.
# vi /usr/local/freetds/etc/freetds.conf (
[global]
client charset = EUC-KR
[192.168.10.2]
host = 192.168.10.2
port = 1433
tds version = 8.0
3. 확인
아래 명령어를 통해서 접속이 잘 되는지 확인할 수 있습니다.
# /usr/local/freetds/bin/tsql -H 192.168.10.2 -p 1433 -U neulwon -P 12345678
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
configure 단계에서 'Directory /usr/local/freetds is not a FreeTDS installation directory' 라는 메시지가 나올경우
# cp /usr/local/src/freetds/include/tds.h /usr/local/freetds/include/
또는
# cp /usr/local/src/freetds/src/tds/.libs/tds.h /usr/local/freetds/include/
tds.h 파일을 설치된 디렉토리에 복사한다.
-----------------------------------------------------------------------------------------
php 5.X --with-mssql 오류시 해결 방안
php 5.X에서 mssql연동을 위해 freetds를 설치할 경우에 php configure에 --with-mssql=/usr/local/freetds로 주었을때
해당 경로에 설치가 되어있음에도 불구하고 해당 경로에 설치가 되어있지 않다고 나오는 경우가 발생합니다.
에러 메세지
error Directory /usr/local/freetds is not a FreeTDS installation directory
해당 문제는 tds.h, libtds.a가 해당 설치경로에 있지 않아 설치되어 있는데도 설치되어 있지 않은것으로 인식되는 문제로 보입니다.
아래와 같이 해당 파일들을 경로로 복사해 주면 문제가 해결 됩니다.
cp /usr/local/src/freetds-xxx/include/tds.h /usr/local/freetds/include
cp /usr/local/src/freetds-xxx/src/tds/.libs/libtds.a /usr/local/freetds/lib
위와 같이 한 후에 make 과정중에 sysbase 오류가 발생한다면 configure 시에 --with-mssql과 --with-sybase를 같이 넣어 줍니다.
---------------------------------------------------------------------------------------------------------
php-mssql 연동 테스트 소스
<?
putenv("TDSVER=80"); <- 이거는 사용하지마시고 혹시 mssql 2008 이나 연결이 안될경우 추가해보세요.
$hostname = "";
$username = "";
$password = "";
$connection = mssql_connect($hostname,$username,$password)
or die("데이타 베이스에 연결 할수 없습니다.");
print ("데이타 베이스에 연결되었습니다.");
mssql_close($connection);
print ("데이타 베이스의 연결이 해지 되었습니다.");
?>