'Firebird'에 해당되는 글 1건

  1. 2006.10.18 Windows + Apache + FirebirdSQL + PHP
작은 프로젝트에서 Windows + Apache + FirebirdSQL + PHP를 사용할 일이 있었습니다.
이 내용은 그 때 정리한 것입니다.

다들 아시겠지만 FirebirdSQL은 Borland Interbase 6.x대에서 오픈소스화 된 프로젝트로 무료로 사용가능하며 아주 작고 강력한 DBMS입니다.
이러한 특성때문에 많은 프로그램에서 자신들의 프로그램에 포함시켜 설치를 제공하는 곳이 많으며 Interbase와는 많은 호환이되어 PHP에서도 Interbase용 함수를 사용합니다.

--------------------------------------------------------------------
- Apache1.3 + FireBird 1.5 + PHP4.3 설치 과정

1. 버전
. Apache 1.3.33 - http://httpd.apache.org
. PHP 4.3.10 - http://php.net
. Firebird 1.4.2.4731 - http://firebirdsql.org



2. 설치파일들
. apache_1.3.33-win32-x86-no_src.exe
. php-4.3.10-Win32.zip
. Firebird-1.5.2.4731-Win32.exe


Apache와 Firebird는 설치, php는 적당한 경로에 압축을 풀어주세요.

3. httpd.conf 파일 설정
= httpd.conf에 다음과 같은 내용을 추가한다.

############################################################################
# Config for PHP4 on Apache 1.3.33
############################################################################
# 주의1. 아파치 설정에서 경로는 대신 /을 사용할 것.
# 주의2. 경로는 자신의 경로로 바꿀 것
AddType application/x-httpd-php .php
# For PHP 4
LoadModule php4_module "C:/PHP/sapi/php4apache.dll"
# specify the directory where php.ini is
SetEnv PHPRC "C:/PHP"
############################################################################

= httpd.conf 에서 DirectoryIndex 을 찾아 index.html 뒤에 index.php 를 추가한다.



4. PHP 설정
= PHP디렉토리의 php4ts.dll 파일을 windows 디렉토리로 복사
= PHP디렉토리의 php.ini-dist 파일을 php.ini 파일로 이름을 변경하여 window 디렉토리로 복사
= Interbase 의 사용을 위해 PHPdlls 에 있는 gds32.dll 을 windows의 system32 에 복사 (이미 존재할 시 덮어씌울 필요는 없음, 버전이 새로운 것이 높다면 덮어씌우면 됨)


= php.ini 에서 수정할 사항

; extension_dir = "C:PHPextensions"의 주석 제거
; (만약 extension_dir 의 경로가 다르다면 맞는 경로로 설정)
; extension=php_interbase.dll ;주석 제거
; magic_quotes_sybase 을 On으로


= php.ini 에서 추가할 사항

; 만약 이미 존재한다면 옵션만 수정할 것
[InterBase]
ibase.allow_persistent PHP_INI_SYSTEM
ibase.max_persistent PHP_INI_SYSTEM
ibase.max_links PHP_INI_SYSTEM
ibase.default_db PHP_INI_SYSTEM
ibase.default_user PHP_INI_ALL
ibase.default_password PHP_INI_ALL
ibase.default_charset PHP_INI_ALL
ibase.timestampformat PHP_INI_ALL
ibase.dateformat PHP_INI_ALL
ibase.timeformat PHP_INI_ALL




--------------------------------------------------------------------
- 설정 확인.
htdocs 에 php 파일을 하나 만들고 phpinfo(); 함수를 넣어봅니다.
웹으로 접속해봅시다.

보라색표에 PHP로고와 PHP Version 4.3.10 같은 문구가 나타났나요?
이제 ctrl+f로 interbase를 검색해봅시다.
관련 항목들이 나오며 Interbase Support enabled 로 나오나요?

그렇다면 설정이 제대로 된 것 입니다.^^



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


설정 내용들의 간단한 설명

1. httpd.conf 의 설정에서.

다들 아시겠지만 httpd.conf는 아파치웹서버의 설정파일이다.
PHP 스크립트를 사용하기위해 아파치를 많이들 이용하며,

Windows상에서의 Apache+PHP연동에 대한 자료를 찾아보면 php.exe를 이용하는 방법이 많이 나와있다.
이런 팁들에서 특이한건 PHP모듈을 로딩해놓고도 php.exe를 이용한다는 것이다.
(이런 내용의 설정이다. Action application/x-httpd-php "/php/php.exe")

설치문서를 찾아보면 보안문제를 비롯한 여러문제로 인해 php.exe를 이용하는 방법은 권장하고 있지 않으며, php-apache 모듈의 이용을 권장하고 있다.

정확하지 않은 카더라통신 수준의 기억에 의하면 Windows 9X대 에서는 php.exe를 이용하는 수밖에 없기 때문에 그와같은 설정을 했던 것 같다.


2. PHP설정단계에서.
php4ts.dll 의 역할은 정확하게 기억나지 않는다. -_-;

php.ini 는 다들 아시겠지만 php의 설정파일이다. 나중에 메모리 제한등을 여기서 해결할 수 있다.

gds32.dll 은 GD라이브러리가 아닌 Interbase 연결을 위한 라이브러리이다. (에러가 나더라도 GD관련 에러로 착각하지 말자.)

3. php.ini수정에서.
magic_quotes_sybase 을 On으로 바꾸는 것은 Interbase/Firebird 관련 함수를 사용하기위해서 이렇게 하라고 http://kr2.php.net/ibase 에 나와있다. (왠지는 모른다.)

extension=php_interbase.dll 의 주석해제는 Interbase/Firebird 관련 함수가 들어있는 라이브러리 모듈을 활성화 시키는 것이다.
만약 이 라인을 그대로 주석인채 서비스를 연결해보면 관련 함수가 연결단부터 없는 함수라는 메세지를 보여줄 것이다.

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

발견된 문제 #1
FirebirdSQL 을 Zip Binary(파일명 Firebird-1.5.2.4731_win32.zip) 으로 설치하였을 경우 Undefined service gds_db/tcp 라는 요상한메세지가 나오며 DB연결에 실패한다.
물론 설정 확인에서도 정상이었다.
- 해결책
FirebirdSQL을 Install 버전으로 설치한 후 다시 Uninstall 하고 FirebirdSQL을 다시 설정하면 정상적으로 된다. 이유는 아직 파악하지 못하였다.
아마 서비스등록과 레지스트리 등록외에도 무언가 필요한게 남는 것 같지만 좀더 알아봐야할 것 같다.

...윈도우즈system32driversetcservices 라는 파일이 있다.
이 파일에 gds_db 3050/tcp 식의 3050 tcp포트를 정의한 라인이 있는지 확인해보자. listening 포트를 정의하는 이 파일인 이것에 굳이 추가하지 않아도 되지만 좀더 확연한 처리를 위해 등록하곤 한다.

이것을 추가하는 것으로 해결이되었다.
특이한 것은 인스톨 버전에서는 이러한 내용이 없는 것으로 보아 다른 방법을 사용하는 것 같으며, 마지막
(뉴라인or 엔터) 를 잊지 말자.
Posted by freezn