CentOS7 + PHP7 + SQL Server 연결

길라잡이 0 15 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

번호 제목 글쓴이 날짜 조회
84 윈도우10 파일 확장자 변경하기 길라잡이 06.25 4
83 [CentOS7] PHP 7.3 to 7.2 downgrade (PHP 다운그레이드) 방법 길라잡이 06.17 7
82 CENTOS 7 / RHEL 7 LINUX 시스템에 PHP 7.3을 설치하는 방법 길라잡이 06.17 25
81 CentOS 6, CentOS 7에서 nginx 1.14.2, mysql 8.0.15, php 7.3.4 설… 길라잡이 06.17 8
80 Yum repo 제거 길라잡이 06.16 10
79 CentOS 7에서 PHP 7.3을 설치하는 방법 길라잡이 06.16 50
78 PHP 7.3.4 Stable Source 설치 길라잡이 06.15 8
77 CentOS 6에 PHP 5.3 설치 (yum) 길라잡이 06.15 11
76 [Linux] phpMyAdmin 오류 생길때 (The mbstring extension is missing… 길라잡이 06.15 11
75 워드프레스 멀티사이트 만들기 길라잡이 06.13 11
74 특정 IP에서만 보기 길라잡이 06.13 47
73 [PHP 5 / 7] php.ini 설정 변경 길라잡이 06.13 18
열람중 CentOS7 + PHP7 + SQL Server 연결 길라잡이 06.13 16
71 [CentOS 7] PHP 5.4 to PHP 7.1 업그레이드 길라잡이 06.13 16
70 당신의 숨겨진 재능을 알아보는 행동 심리테스트 길라잡이 05.03 14
69 생활 속의 재활용 아이디어 길라잡이 05.02 14
68 파일이름 일괄변경 DarkNamer 프로그램 길라잡이 03.12 15
67 워드프레스의 속도 향상을 위한 W3 Total Cache 플러그인 사용법 및 설정 방법 길라잡이 02.24 14
66 VirtualBox 네트워크 브릿지에서 이름이 없는 경우 길라잡이 02.09 17
65 그 밖의 기능 WordPress.org 링크삭제 길라잡이 01.09 21
64 윈도우 10 정품인증 쉽게 해결하는 방법 길라잡이 2018.12.26 24
63 뱅크북 코리아 QR 길라잡이 2018.10.02 61
62 자취하는여자 생존게임 QR 길라잡이 2018.10.02 38
61 구글블로그 애드센스 광고 게재하기 방법 길라잡이 2018.09.08 54
60 구글 OCR, 이미지를 텍스트로 문자로 변환하기 추출하기 길라잡이 2018.08.25 58
59 애드센스 수익금 지급 받기 길라잡이 2018.08.24 46
58 우리은행 외화 송금 받기할 때 수수료 절약 방법 길라잡이 2018.08.24 81
57 AccessPress Facebook Auto post 플러그인으로 페이스북 페이지에 포스트 자동 발행하기 길라잡이 2018.08.24 58
56 크롬 마우스 우클릭 해제로 텍스트 복사하기 길라잡이 2018.08.24 54
55 인증서 갱신 및 도메인 인증서 발급 길라잡이 2018.08.17 78


 

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