CentOS7 + PHP7 + SQL Server 연결

길라잡이 0 172 2019.06.13 20:04

1. 서버 상태 확인

[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core) 

[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-693.2.2.el7.x86_64 #1 SMP Tue Sep 12 22:26:13 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

[root@localhost ~]# php -v
PHP 7.0.25 (cli) (built: Oct 29 2017 13:43:03) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.25, Copyright (c) 1999-2017, by Zend Technologies


2. SQL Server 연결을 위해서는 리눅스용 드라이버가 필요합니다.
아래 사이트에서 "CentOS7.tar" 파일을 내려받는다. 현재 최신버전은 5.1.2 입니다.

https://github.com/Microsoft/msphpsql/releases

설치에 사용할 파일은 CentOS7-7.0.tar 이며,  CentOS 7 + PHP 7.0 을 의미합니다.

php_sqlsrv_20171202_01.png

내려받은 압축파일에는 아래와 같이 파일이 들어있으며, 필요한 파일은 "php_sqlsrv_7_nts.so" 파일입니다.

php_sqlsrv_20171202_02.png



3. 파일을 서버에 업로드 합니다.

php_sqlsrv_7_nts.so 파일을 /usr/lib64/php/modules 에 복사합니다.
php_pdo_sqlsrv_7.nts.so 는 오류가 발생하므로 사용하지 않습니다.
[root@localhost ~]# cp /home/happyjung/php_sqlsrv_7_nts.so /usr/lib64/php/modules/

복사 후 권한을 설정한다.
[root@localhost ~]# chmod 755 /usr/lib64/php/modules/php_sqlsrv_7_nts.so 



4. /etc/php.ini  적당한 위치에 내용 추가
[root@localhost ~]# vi /etc/php.ini
extenstion=php_sqlsrv_7_nts.so
;extenstion=php_pdo_sqlsrv_7_nts.so

php_sqlsrv_20171202_03.png



5. SQL Server 연결을 위한 FreeTDS 설치

[root@localhost ~]# yum install freetds-devel libxml2-devel


6. /etc/freetds.conf
[root@localhost ~]# cp -a /etc/freetds.conf /etc/freetds.conf.original
[root@localhost ~]# vi /etc/freetds.conf  끝에 내용 추가
[MSSQL]
        host = IP주소
        port = 1433
        tds version = 8.0   # https://www.happyjung.com:6001/lecture/2604 참고
        client Charset = UTF-8



7. /etc/locales.conf 수정
[root@localhost ~]# cp -a /etc/locales.conf /etc/locales.conf.original
[root@localhost ~]# vi /etc/locales.conf
[default]ser
        date format = %b %e %Y %I:%M:%S:%z%p

를 아래와 같이 변경

[default]
        date format = %Y-%m-%d %H:%M:%S
        charset = euc-kr




8. Apache를 재시작한다.

[root@localhost ~]# systemctl restart httpd



9. php 버전 확인해서 오류가 뜨는지 확인합니다.
[root@localhost ~]# php -v
PHP 7.0.25 (cli) (built: Oct 29 2017 13:43:03) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.25, Copyright (c) 1999-2017, by Zend Technologies



10. MS-SQL 접속 테스트
tsql 파일 위치 확인
[root@localhost ~]# find / -name tsql -print
/usr/bin/tsql

[root@localhost ~]# /usr/bin/tsql --help
Usage:  /usr/bin/tsql [-a <appname>] [-S <server> | -H <hostname> -p <port>] -U <username> [-P <password>] [-I <config file>] [-o <options>] [-t delim] [-r delim] [-D database]

[root@localhost ~]# /usr/bin/tsql -S [freetds.conf에 지정한 서버 이름] -p 1433 -U 디비아이디 -P '비밀번호' -D 디비네임
또는
[root@localhost ~]# /usr/bin/tsql -H xxx.xxx.xxx.xxx -p 1433 -U 디비아이디 -P '비밀번호' -D 디비네임
1> select 필드1 from dbo.테이블 where 필드2='aaa'
2> go
필드1
123456
(1 row affected)



11. SQL Server 모듈 설치 확인
php 파일 위치 확인
[root@localhost ~]# find / -name php -print

php ≤ 5.2
[root@localhost ~]# /usr/bin/php -i | grep mssql

php ≥ 5.3 , 7
[root@localhost ~]#



12. 연결을 위한 PHP 소스

<?php 
$MSSQL_server = "[MSSQL]";   // freetds.conf에 지정한 서버 이름]
$MSSQL_hostT = "HOST_IP";   //  SQL Server IP
$MSSQL_portT = "HOST_IP";   //  SQL Server IP
$MSSQL_name = "TEST";
$MSSQL_id = "USER";
$MSSQL_pw   = 'DBPW';

$mssql_conn = mssql_connect($MSSQL_SERVER, $MSSQL_USER, $MSSQL_PW);
mssql_select_db($MSSQL_NAME, $mssql_conn);

$query = "select * from table";
$result = mssql_query($query, $mssql_conn);
echo mssql_result($rs, 0, 0);
mssql_close($conn);



try {
    $Conn = new PDO("dblib:host=$MSSQL_host:$MSSQL_port; dbname=$MSSQL_name;", $MSSQL_id, $MSSQL_pw);
    $Conn -> setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
} catch(Exception $e) {
    die( print_r( $e -> getMessage() ) );
}

try {
    $Qry = "SELECT * FROM [TABLE_NAME]"; 
    $Rslt = $Conn -> prepare($Qry); 
    $Rslt -> execute();
    $Rslt_Data = $Rslt -> fetchAll(PDO::FETCH_ASSOC);
} catch(Exception $e) {
    echo $e -> getMessage();
    exit;
}

foreach ( $Rslt_Data as $LIST ) {
    echo "$LIST[FIELD_NAME]<br>";
}
?>



참고자료
http://faq.hostway.co.kr/Linux_WEB/1261
http://oerun.tistory.com/17
http://php.net/manual/en/function.mssql-connect.php
http://noorol.blog.me/220937312032

https://stackoverflow.com/questions/34377338/linux-php-7-0-and-mssql-microsoft-sql 

 

Comments

번호 제목 글쓴이 날짜 조회
196 error 에러주소 메인보네기 길라잡이 09.23 4
195 파이썬 티스토리 제목 카테고리 크롤링 길라잡이 09.22 4
194 리눅스 TOP 명령어 (시스템 전체상태를 실시간으로 파악) 길라잡이 09.16 14
193 [Python] 파이썬 설치방법 (64비트) 길라잡이 09.11 4
192 윈도우즈에 아나콘다, 텐서플로 설치하기 길라잡이 09.11 5
191 php 특정 웹페이지에 암호걸기 길라잡이 08.21 22
190 PHP와 JSON으로 Youtube 내채널 목록 가져오기 길라잡이 08.13 15
189 유투브 주소에서 아이디 값만 추출 길라잡이 08.13 20
188 유튜브 [YOUTUBE API] 유튜브 API통해 재생목록 및 VIEW_COUNT 출력 길라잡이 08.12 13
187 파이썬 MySql 쿼리 길라잡이 07.06 44
186 PHP 랜덤 문자열 생성 길라잡이 06.14 32
185 PHP 도메인명으로 아이피 확인하기 gethostbyname 길라잡이 06.13 40
184 파이썬 mysql 사용법 예제 pymysql 설치 길라잡이 06.13 49
183 MySQL 원격 접속 허용 길라잡이 06.13 46
182 IDLE 파이썬 쉘 길라잡이 06.13 48
181 파이썬 버전 확인 길라잡이 06.13 45
180 파이썬 DB연동 - PyMySQL + MySQL 길라잡이 06.13 41
179 php에서 쉘 명령어 실행 길라잡이 06.11 39
178 윈도우10 삭제가 안되는 폴더 파일 삭제하는 법 길라잡이 06.08 44
177 워드프레스 첫 번째 이미지를 자동으로 특성 이미지로 설정하는 방법 길라잡이 06.08 52
176 리눅스 CentOS 7 좀비 프로세스 생성, 찾기, 종료 길라잡이 06.04 45
175 MariaDB innodb_buffer_pool_size 최적화 항목들 길라잡이 06.01 55
174 리눅스 정보 조회 OS, CPU, RAM 길라잡이 06.01 48
173 MariaDB timeout 설정 길라잡이 06.01 46
172 데이터베이스 timeout 설정하기 길라잡이 06.01 39
171 MariaDB(MYSQL) 최적화 하기 – my.cnf(InnoDB) 설정 길라잡이 05.31 49
170 MariaDB Binlog Cache and Binlog Cache Size 길라잡이 05.31 56
169 apache error log 안쌓이게 하는 방법 길라잡이 05.31 48
168 파이썬으로 크롤링하는데 값이 안 읽어와질때 해결법 길라잡이 05.31 54
167 MariaDB max_heap_table_size 길라잡이 05.31 40


 

페이스북에 공유 트위터에 공유 구글플러스에 공유 카카오스토리에 공유 네이버밴드에 공유