기존 5.2버젼까지와 설치 방법이 많이 다릅니다. [zend]는 잊어주세요.

 

1. ioncube.tgz 첨부파일을 다운 받아서, 링크하드 설치폴더에 덮어 씌어주세요.
2. 설치한 폴더에 loader-wizard.php 의 파일을 확인 하실 수 있습니다.
브라우져에서 http://{링크하드설치폴더}/ioncube/loader-wizard.php 를 실행하면, 자신의 컴퓨터에 ioncube를 설치하는 안내 페이지를 확인 하실 수 있습니다.

3. 첫번째 선택 항목에선 3번째 local 을 선택하면, 다음단계에서 ioncube를 연결하기 위한 내용이 나옵니다.

이부분을 따라 가시면 됩니다.


아래 부분에 Installation Instructions 과 네모 박스안에 설치 방법을 살표보겠습니다.

1. Download one of the following archives of Loaders for Linux x8
- 이부분을 생략하셔도 됩니다. 이미 ioncube.tgz에 포함이 되어있습니다.
2. Put the Loader files in /usr/lib/php/modules
- ioncube_loader_lin_5.3.so 파일을 php modules 관리 폴더에 넣어줍니다.
cp {설치폴더}/ioncube/ioncube_loader_lin_5.3.so /usr/lib/php/modules/ (폴더는 다를 수 있습니다.)
3. # Save this 20ioncube.ini file and put it in your ini files directory, /etc/php.d
20ioncube.ini 파일을 /etc/php.d/ 폴더에 복사해주세요. 파일링크가 되어있지만, 첨부해놓겠습니다.
4. Restart the Apache server software.
ex) /etc/init.d/httpd restart 아파치를 재가동 해주세요.
5. When the server software has restarted, click here to test the Loader.
아파치 재가동 후 다시 http://{링크하드설치폴더/ioncube/loader-wizard.php 파일을 열어보면, 셋팅 여부를 확인 하실 수 있습니다.
6. If the Loader installation failed, check the Apache error log file for errors and see our guide to Unix related errors.
ioncube로더 아직도 셋팅이 안되었다면 다음 가이드를 따르라.
이문제는
edit /etc/selinux/config
SELINUX=disabled
SELINUX가 활성화 되었을때의 문제입니다. 위에 처럼 disabled로 바꿔주시고, 시스템을 재부팅해주세요.
다시 아파치 올리고 ioncube가 로드 되었는지 확인해주세요.


컴파일 오류시 대처하기

1.

configure: error: xml2-config not found. Please check your libxml2 installation.  에러날때
# yum install libxml2-devel

 

2.

configure: error: Please reinstall the BZip2 distribution   에러날때
해결책 :
[root@localhost local]# wget ftp://sources.redhat.com/pub/bzip2/v102/bzip2-1.0.2.tar.gz
Bzip2팩키지는 configure script가 없습니다. option을 한줄로 써서 컴파일 하고 설치합니다.
# cd bzip2-1.0.2
# make PREFIX=/tools install
# make clean
# cd ../php-5.2.11

 

3.

configure: error: libXpm.(a|so) not found   에러날때
# yum install gtk+ gtk+-devel

# yum install libXpm-devel

 

(# yum install xorg-x11-devel)

 

 

4.

configure: error: mcrypt.h not found. Please reinstall libmcrypt.   에러날때
# cd ..
# wget http://ftp.linux.co.kr/pub/etc/libmcrypt-2.5.7.tar.gz
# tar zxvfp libmcrypt-2.5.7.tar.gz
# cd libmcrypt-2.5.7
# ./configure && make && make install
# cd ../php-5.2.11

 

5.

/usr/bin/ld: cannot find -lltdl
collect2: ld returned 1 exit status
make: *** [libphp5.la] Error 1   오류가 날때
# cd ..
# wget http://ftp.gnu.org/gnu/libtool/libtool-2.2.6a.tar.gz
# cd libtool-2.2.6
# ./configure
# make
# make install
# cd ../php-5.2.11

 

6.

overflow2 에러 발생시
~/php-5.3.4/ext/gd/gd.c (php를 받아서 압축을 푼 경로)


/*
        if (overflow2(font->nchars, font->h)) {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error reading font, invalid font header");
                efree(font);
                php_stream_close(stream);
                RETURN_FALSE;
        }
        if (overflow2(font->nchars * font->h, font->w )) {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error reading font, invalid font header");
                efree(font);
                php_stream_close(stream);
                RETURN_FALSE;
        }
*/ 해당 부분을 주석처리


'Dev > PHP' 카테고리의 다른 글

PHP CLI 예제 -> 명령행 옵션, argc argv 매개 변수 구하기  (0) 2011.05.13
php5.3 에 ioncube 설치하기  (0) 2011.05.13
php 컴파일에러  (0) 2011.05.13
php mssql 연동 (freetds)  (0) 2011.05.13
FreeTDS 설치 (PHP와 MS-SQL 연동)  (0) 2011.05.13
출처 : http://www.ysy2080.com/uribury/linuxno3/929
 

오류 메세지 : configure: error: xml2-config not found. Please check your libxml2 installation 
해결 방법 : yum install libxml2 libxml2-devel -y 

오류 메세지 : configure: error: Please reinstall the BZip2 distribution 
해결 방법 : yum -y install bzip2-devel 

오류 메세지 : configure: error: libjpeg.(a|so) not found. 
해결 방법 : yum -y install libjpeg-devel 

오류 메세지 : configure: error: libpng.(a|so) not found. 
해결 방법 : yum -y install libpng-devel 

오류 메세지 : configure: error: freetype.h not found. 
해결 방법 : yum -y install freetype-devel 

오류 메세지 : configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing. This should not happen. Check config.log for additional information. 
해결 방법 : yum -y install libc-client-devel 

오류 메세지 : configure: error: Kerberos libraries not found. 
해결 방법 : yum -y install krb5-devel 

오류 메세지 : configure: error:Cannot find OpenSSL's <evp.h> 
해결 방법 : yum -y install openssl-devel

 

checking for termcap functions library... configure: error: No curses/termcap library found
해결책 :  # yum -y install ncurses-devel

configure: error: C++ preprocessor "/lib/cpp" fails sanity check
해결책 : # yum -y install gcc-c++

/usr/lib/libdb-4.3.so: could not read symbols: File in wrong format
/usr/lib/libexpat.so: could not read symbols: File in wrong format

해결책 : # mv /usr/lib/libexpat.so /usr/lib/libexpat.so.bak
               # ln -s /lib64/libexpat.so.0.5.0 /usr/lib/libexpat.so 
               # mv /usr/lib/libdb-4.3.so /usr/lib/libdb-4.3.so.bak
               # ln -s /lib64/libdb-4.3.so /usr/lib/libdb-4.3.so
에러의 원인은 64비트 환경에서 32비트용 소스를 가져다가 설치하기 때문이다. 컴파일 도구와 관련된 심볼릭 링크 파일을 찾지 못한다고 나오고 있다.

configure: error: Unable to locate gmp.h
해결책 : # yum -y install gmp*

configure: error: not found. Please reinstall the expat distribution.
해결책 : # yum -y install expat*

configure: error: Please reinstall the libcurl distribution - easy.h should be in /include/curl/
해결책 : # yum -y install curl* 또는 yum -y install curl & yum -y install curl-devel

configure: error: Please reinstall libmcrypt - I cannot find mcrypt.h <br>
configure: error: Please reinstall libmhash - I cannot find mhash.h
해결책 : # yum install libmcrypt libmcrypt-devel libmhash libmhash-devel

Configure: error: xml2-config not found. Please check your libxml2 installation
해결책 : #yum install libxml2-devel

Checking for pkg-config... /usr/bin/pkg-config
configure: error: Cannot find OpenSSL's <evp.h>
해결책 : #yum install openssl-devel

Configure: error: Please reinstall the BZip2 distribution
해결책 : # yum install bzip2-devel

Configure: error: libjpeg.(also) not found.
해결책 : # yum install libjpeg-devel

Configure: error: libpng.(also) not found.
해결책 : yum install libpng-devel

Configure: error: freetype.h not found.
해결책 : #yum install freetype-devel

Configure: error: Cannot find MySQL header files under /usr.
Note that the MySQL client library is not bundled anymore!
해결책 : # yum install mysql-devel

Configure: error: Please reinstall the ncurses distribution
해결책 : # yum install ncurses-devel

Checking for unixODBC support... configure: error: ODBC header file '/usr/include/sqlext.h' not found!
해결책 : # yum install unixODBC-devel

Configure: error: Cannot find pspell
해결책 : # yum install pspell-devel

Configure: error: snmp.h not found. Check your SNMP installation.
# yum install net-snmp-devel

configure: error: ZLIB extension requires zlib >= 1.0.9

ln -sf /usr/lib64/libgssapi_krb5.so.2.2 /usr/lib/libgssapi_krb5.so
ln -sf /usr/lib64/libkrb5.so.3.3 /usr/lib/libkrb5.so
ln -sf /usr/lib64/libk5crypto.so.3.1 /usr/lib/libk5crypto.so
ln -sf /lib64/libcom_err.so.2 /usr/lib/libcom_err.so
ln -sf /usr/lib64/libgcrypt.so.11 /usr/lib/libgcrypt.so
ln -sf /usr/lib64/libgpg-error.so.0 /usr/lib/libgpg-error.so
ln -sf /usr/lib64/libexpat.so /usr/lib/libexpat.so
ln -sf /usr/lib64/libm.so /usr/lib/libm.so
ln -sf /usr/lib64/libssl.so /usr/lib/libssl.so

64bit os에서 php 5.2.6 configure 옵션에 --with-kerberos 옵션 넣어서 configure 진행했을경우 에러 나는 경우 조치 사항

krb5-devel 관련 라이브러리 파일을 /usr/lib64 에서 /usr/lib로 복사 링크

/usr/lib64/libdes425.a
/usr/lib64/libdes425.so
/usr/lib64/libgssapi_krb5.a
/usr/lib64/libgssapi_krb5.so
/usr/lib64/libgssrpc.a
/usr/lib64/libgssrpc.so
/usr/lib64/libk5crypto.a
/usr/lib64/libk5crypto.so
/usr/lib64/libkadm5clnt.a
/usr/lib64/libkadm5clnt.so
/usr/lib64/libkadm5srv.a
/usr/lib64/libkadm5srv.so
/usr/lib64/libkdb5.a
/usr/lib64/libkdb5.so
/usr/lib64/libkrb4.a
/usr/lib64/libkrb4.so
/usr/lib64/libkrb5.a
/usr/lib64/libkrb5.so

'Dev > PHP' 카테고리의 다른 글

php5.3 에 ioncube 설치하기  (0) 2011.05.13
컴파일 오류시 대처하기  (0) 2011.05.13
php mssql 연동 (freetds)  (0) 2011.05.13
FreeTDS 설치 (PHP와 MS-SQL 연동)  (0) 2011.05.13
CentOS 64bit Apache PHP 컴파일 설치  (2) 2011.05.13


출처 : http://woolab.net/140121930250

php와 mssql 연동

1. freetds 설치
# wget http://ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz
# tar xvfz freetds-stable.tgz
# cd freetds-0.82
# ./configure --prefix=/usr/local/freetds \
--with-tdsver=8.0 \
--disable-odbc \
--disable-debug \
--enable-dbmfix \
--enable-msdblib
# make
# make install

2. php 컴파일
# ./configure ...... --with-mssql=/usr/local/freetds
* error: Directory /usr/local/freetds is not a FreeTDS installation directory 오류
# cp /usr/local/freetds-0.82/include/tds.h /usr/local/freetds/include/
* error: Could not find /usr/local/freetds/lib/libtds.a|so 오류
# cp /usr/local/freetds-0.82/src/tds/.lib/libds.a /usr/local/freetds/lib/
# make
# make install
# /usr/local/apache2/bin/apachectl restart

3. 확인 및 설정
- phpinfo
> mssql 확인
- php.ini
> mssql.charset =  "UTF-8"

4. yum 설치
# yum install -y freetds php-mssql
# /etc/freetds.conf
> [mssql_database]
> host = xxx.xxx.xxx.xxx
> port = 1433
> tds version = 8.0
> client charset = UTF-8

5. 접속 확인
# tsql -H xxx.xxx.xxx.xxx -p 1433 -U db_user_name -P db_user_password
> locale is "en_US.UTF-8"
> locale charset is "UTF-8"
> 1> select * from table_name
> 2> go

6. php 테스트
<?
$db_conn=mssql_connect("mssql_database", "db_user_name", "db_user_password");
mssql_select_db("database_name", $db_conn);
$sql="select count(*) from table_name";
$rs=mssql_query($sql, $db_conn);
echo "result";
echo mssql_result($rs, 0, 0);
mssql_close($db_conn);
?>

'Dev > PHP' 카테고리의 다른 글

컴파일 오류시 대처하기  (0) 2011.05.13
php 컴파일에러  (0) 2011.05.13
FreeTDS 설치 (PHP와 MS-SQL 연동)  (0) 2011.05.13
CentOS 64bit Apache PHP 컴파일 설치  (2) 2011.05.13
PHP Configure Option  (0) 2011.05.13

 

FreeTDS 설치 (PHP와 MS-SQL 연동)


Apache + PHP 사용시 원격 MSSQL 데이터베이스에 접근 하는 방법중 FreeTDS를 이용한 방법이 있습니다.
설치법도 간단하고 간단한 설정법으로 한글깨짐현상도 해결할 수 있습니다.


[설치]
/usr/local/src#
 wget http://ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz

/usr/local/src# tar xvfpz freetds-stable.tgz

/usr/local/src/freetds# ./configure 
--prefix=/usr/local/freetds 
--with-tdsver=8.0 
--disable-odbc 
--disable-debug 
--enable-dbmfix 
--enable-msdblib

/usr/local/src/freetds# make

/usr/local/src/freetds#
 make install


[참고]

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

 

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 파일을 설치된 디렉토리에 복사한다.


[설치 계속]

freetds.conf 파일에 client charset=EUC-KR을 추가하여 한글깨짐 현상을 막을 수 있습니다..
( /usr/local/freetds/etc/freetds.conf )

[global]
client charset = EUC-KR


PHP 설치

/usr/local/src/php# ./configure 
--prefix=/usr/local/php 
--with-apxs2=/usr/local/bin/apxs
--with-sybase=/usr/local/freetds
--with-mssql=/usr/local/freetds    <- 하단 참고사항 확인


/usr/local/src/php# make
/usr/local/src/php# make install

[참고] 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와 MS-SQL연동을 위해 odbc를 이용한 방법 - 오래된메뉴얼]
http://cafe.naver.com/webmas.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=1000

 

 

[출처] 정상을 위한 독주2 (http://blueb.net/blog/1321) | 블루비

[추가/수정] 차동훈 (http://system.neulwon.com)

 

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

 

php - mssql 연동 테스트 소스

 

<?

$connection=mssql_connect("MyServer","msconn","msconn");
print ("db open");
mssql_connect($connection);
print ("db close");
$status = mssql_select_db("master",$connection);

if (!$status) {
$errNO = mssql_errno($connection);
$errMSG = mssql_errno($connection);

echo("데이터 베이스 연결 실패");
echo("에러메세지 $errNO : $errMSG");
exit;
}


$que = mssql_query("select * from sysfiles");
$row = mssql_fetch_row($que);

echo"

$row[0] $row[1] $row[2]";

echo"
성공";
?>

[발췌] Nugi's World | 야서누기 (http://blog.daum.net/evasuri/10243883)

'Dev > PHP' 카테고리의 다른 글

php 컴파일에러  (0) 2011.05.13
php mssql 연동 (freetds)  (0) 2011.05.13
CentOS 64bit Apache PHP 컴파일 설치  (2) 2011.05.13
PHP Configure Option  (0) 2011.05.13
PHP 암호화 함수정리  (0) 2011.05.07

○ CentOS 64bit Apache PHP 컴파일 설치

mysql은 rpm을 사용

 

▷ PHP 관련 라이브러리 설치

- rpm 과 연동하여 컴파일을 해도 되지만 rpm 업데이트시에 정상 동작을 보장할수 없다

버그패치 정도의 업데이트가 아닌 라이브러리의 버전 업데이트는 Apache의 기동이

되지 않는 상황이 발생할수 있다

▷ 라이브러리 설치

- 설치할 소스 : zlib-1.2.5 openssl-0.9.8op freetype-2.3.12 jpegsrc.v8a.tar.gz

libpng-1.2.39 libxml2-2.6.30 expat-2.0.1 fontconfig-2.8.0 gd-2.0.35

- 설치되는 소스는 /usr/local 에 설치될 것이며 각각의 설치된 라이브러리를 등록 시켜야 한다

 

[root@web ~]# rpm -qa | grep mysql
mysql-5.0.77-4.el5_5.3
mysql-5.0.77-4.el5_5.3
mysql-devel-5.0.77-4.el5_5.3
mysql-devel-5.0.77-4.el5_5.3mysql-5.0.77-4.el5_5.3
mysql-5.0.77-4.el5_5.3
mysql-devel-5.0.77-4.el5_5.3
mysql-devel-5.0.77-4.el5_5.3

 

PHP 컴파일 설치시에 /usr/local/lib에 설치된 라이브러리를 /usr/local/lib64에서 찾으려고 하는 문제가 있다

PHP설치 옵션의 PATH를 /usr/local/lib으로 지정해도 라이브러리를 찾을 수 없다는

Error 가 발생한다

다음과 같이 심볼릭 링크로 설정하자

[root@web5 ~]# ln -s /usr/local/lib /usr/local/lib64

 

 

- zlib 설치

다운로드 URL : http://www.zlib.net

 

[root@web ~]# cd /usr/local/src/

[root@web6 src]# wget http://zlib.net/zlib-1.2.5.tar.gz

[root@web6 src]# tar xvfz zlib-1.2.5.tar.gz

[root@web6 src]# cd zlib-1.2.5

[root@web6 zlib-1.2.5]# ./configure --shared --prefix=/usr/local

[root@web6 zlib-1.2.5]# make

[root@web6 zlib-1.2.5]# make install

[root@web6 zlib-1.2.5]# ldconfig

[root@yt-web6 zlib-1.2.5]# cd ..

 

- openssl 설치

다운로드 URL : http://www.openssl.org

[root@yt-web6 zlib-1.2.5]# cd ..

[root@web6 src]# wget  http://www.openssl.org/source/openssl-0.9.8o.tar.gz

[root@web6 src]# tar xvfz openssl-0.9.8o.tar.gz

[root@web6 src]# cd openssl-0.9.8o

[root@web6 openssl-0.9.8o]# ./config --prefix=/usr/local zlib shared

[root@web6 openssl-0.9.8o]# make

[root@web6 openssl-0.9.8o]# make install

[root@yt-web6 openssl-0.9.8o]# cd ..

 

- freetype 설치

다운로드 URL : http://freetype.sourceforge.net/index2.html

[root@web6 src]# wget http://sourceforge.net/projects/freetype/files/freetype2/2.3.12/freetype-2.3.12.tar.gz/download

[root@web6 src]# tar xvfz freetype-2.3.12.tar.gz

[root@web6 src]# cd openssl-0.9.8o

[root@yt-web6 freetype-2.3.12]# ./configure --prefix=/usr/local --disable-static

[root@yt-web6 freetype-2.3.12]# make

[root@yt-web6 freetype-2.3.12]# make install

[root@yt-web6 freetype-2.3.12]# ldconfig

[root@yt-web6 freetype-2.3.12]# cd ..

 

- jpeg 설치

다운로드 URL : http://www.ijg.org

[root@web6 src]# wget http://www.ijg.org/files/jpegsrc.v8b.tar.gz

[root@web6 src]# tar xvfz jpegsrc.v8a.tar.gz

[root@web6 src]# cd jpeg-8a

[root@yt-web6 jpeg-8a]# ./configure --prefix=/usr/local --enable-shared --enable-static

[root@yt-web6 jpeg-8a]# make

[root@yt-web6 jpeg-8a]# make install

[root@yt-web6 jpeg-8a]# ldconfig

[root@yt-web6 jpeg-8a]# cd ..

 

- libpng 설치

다운로드 URL : http://libpng.sourceforge.net

[root@web6 src]# wget http://sourceforge.net/projects/libpng/files/libpng-stable/1.2.39/libpng-1.2.39.tar.gz/download

[root@web6 src]# tar xvfz libpng-1.2.39.tar.gz

[root@web6 src]# cd libpng-1.2.39

[root@yt-web6 libpng-1.2.39]# ./configure --prefix=/usr/local

[root@yt-web6 libpng-1.2.39]# make

[root@yt-web6 libpng-1.2.39]# make install

[root@yt-web6 libpng-1.2.39]# ldconfig

[root@yt-web6 libpng-1.2.39]# cd ..

 

- libxml2설치

다운로드 URL : http://xmlsoft.org

[root@web6 src]# wget http://xmlsoft.org/sources/old/libxml2-2.6.30.tar.gz

[root@web6 src]# tar xvfz libxml2-2.6.30.tar.gz

[root@web6 src]# cd libxml2-2.6.30

[root@yt-web6 libxml2-2.6.30]# ./configure --prefix=/usr/local

[root@yt-web6 llibxml2-2.6.30]# make

[root@yt-web6 libxml2-2.6.30]# make install

[root@yt-web6 libxml2-2.6.30]# ldconfig

[root@yt-web6 libxml2-2.6.30]# cd ..

 

- expat2설치

다운로드 URL : http://www.libexpat.org

[root@web6 src]# wget http://sourceforge.net/projects/expat/files/expat/2.0.1/expat-2.0.1.tar.gz/download

[root@web6 src]# tar xvfz tar xvfz expat-2.0.1.tar.gz

[root@web6 src]# cd expat-2.0.1

[root@yt-web6 expat-2.0.1]# ./configure --prefix=/usr/local

[root@yt-web6 expat-2.0.1]# make

[root@yt-web6 expat-2.0.1]# make install

[root@yt-web6 expat-2.0.1]# ldconfig

[root@yt-web6 expat-2.0.1]# cd ..

 

- fontconfig2설치

다운로드 URL : http://fontconfig.org/wiki

[root@web6 src]# wget http://fontconfig.org/release/fontconfig-2.8.0.tar.gz

[root@web6 src]# tar xvfz fontconfig-2.8.0.tar.gz

[root@web6 src]# cd fontconfig-2.8.0

[root@yt-web6 fontconfig-2.8.0]# ./configure --prefix=/usr/local --with-expat=/usr/local

[root@yt-web6 fontconfig-2.8.0]# make

[root@yt-web6 fontconfig-2.8.0]# make install

[root@yt-web6 fontconfig-2.8.0]# ldconfig

[root@yt-web6 expat-2.0.1]# cd ..

 

- gd2설치

다운로드 URL : http://www.libgd.org/Main_Page

make시에 에러가 난다면 make를 한번더 실행

[root@web6 src]# wget http://www.libgd.org/releases/gd-2.0.35.tar.gz

[root@web6 src]# tar xvfz gd-2.0.35.tar.gz

[root@web6 src]# cd gd-2.0.35

[root@yt-web6 fontconfig-2.8.0]# ./configure --prefix=/usr/local/gd --with-freetype=/usr/local --with-png=/usr/local --with-jpeg=/usr/local --with-fontconfig=/usr/local

[root@yt-web6 gd-2.0.35]# make

[root@yt-web6 gd-2.0.35]# make

[root@yt-web6 gd-2.0.35]# make install

[root@yt-web6 gd-2.0.35]# ldconfig

[root@yt-web6 gd-2.0.35]# cd ..

 

- httpd2설치

다운로드 URL : http://httpd.apache.org

[root@web6 src]# wget http://apache.tt.co.kr/httpd/httpd-2.2.15.tar.gz

[root@web6 src]# tar xvfz httpd-2.2.15.tar.gz

[root@web6 src]# cd httpd-2.2.15

[root@yt-web6 httpd-2.2.15]# vi server/mpm/worker/worker.c

85 #define DEFAULT_SERVER_LIMIT 1024

103 #define DEFAULT_THREAD_LIMIT 64

[root@yt-web6 httpd-2.2.15]# ./configure --prefix=/usr/local/apache --enable-so --with-mpm=worker --enable-ssl --with-ssl=/usr/local --enable-expires

[root@yt-web6 httpd-2.2.15]# make

[root@yt-web6 httpd-2.2.15]# make install

[root@yt-web6 httpd-2.2.15]# cd ..

 

worker 방식의 Apache를 설치하였으며 정적 컴파일 설치를 하였다

worker.c의 85번, 103번 라인을 서버 상황에 맞게 여유있게 설정한다

DEFAULT_SERVER_LIMIT 는 프로세스의 개수 제한

DEFAULT_THREAD_LIMIT 는 프로세스당 쓰레드의 갯수 제한

위의 설정은 1024 * 64 = 65536 개의 쓰레드를 생성할수 있으며 work 방식의 장점은 pork 방식에 비하여 메모리를 확실히 절약할 수 있다

work방식의 튜닝은 프로세스당 적당량의 쓰레드의 설정이 관건이다

너무 많은 쓰레드를 할당하면 프로세스당 메모리 사용량이 비대해져서 메모리의 절약은 있는 반면 성능저하의 원인이 될수 있다

현재의 설정은 최대의 개수제한을 설정 및 컴파일한 것으로 세부적인 설정은 config 파일에서 조정할 수 있다

 

- php 설치

다운로드 URL : http://www.php.net

[root@web6 src]# wget http://www.php.net/get/php-5.3.2.tar.gz/from/a/mirror

[root@web6 src]# tar xvfz tar xvfz php-5.3.2.tar.gz

[root@web6 src]# cd php-5.3.2

[root@yt-web6 php-5.3.2]# ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr --with-mysqli=/usr/lib64/mysql/mysql_config --with-config-file-path=/usr/local/apache/conf --with-zlib-dir=/usr/local --with-jpeg-dir=/usr/local --with-png-dir=/usr/local --with-freetype-dir=/usr/local --with-libxml-dir=/usr/local --with-gd=/usr/local/gd --with-iconv --enable-ftp --with-openssl=/usr/local --with-libdir=lib64

[root@yt-web6 httpd-2.2.15]# make

[root@yt-web6 httpd-2.2.15]# make install

[root@yt-web6 httpd-2.2.15]# cp php.ini-development /usr/local/apache/conf/

[root@yt-web6 httpd-2.2.15]# vi /usr/local/apache/conf/httpd.conf

LoadModule php5_module modules/libphp5.so

AddType application/x-httpd-php .php .phtml .html .htm .inc .cfg

AddType application/x-httpd-php-source .phps

 

 

작성자 goodnux@paran.com 크리엘

'Dev > PHP' 카테고리의 다른 글

php mssql 연동 (freetds)  (0) 2011.05.13
FreeTDS 설치 (PHP와 MS-SQL 연동)  (0) 2011.05.13
PHP Configure Option  (0) 2011.05.13
PHP 암호화 함수정리  (0) 2011.05.07
[PHP] Thread safe / non Thread safe  (2) 2011.04.19

참고 url : http://orion203.springnote.com/pages/6906419.xhtml

 

Php 5.2.16 설치 문서입니다. 이것이 어떤 프로그램인지는 홈페이지를 참조하세요.

 

Prepare#

CentOS 5 가 최소 설치되었다고 가정하고 시작했기 때문에 컴파일 환경을 구축을 먼저 해줘야 합니다.

yum update -y

reboot

yum install gcc.x86_64 gcc-c++.x86_64 wget.x86_64 bzip2-devel.x86_64 pkgconfig.x86_64 openssl-devel.x86_64 make.x86_64 man.x86_64 nasm.x86_64 gmp.x86_64 gdbm-devel.x86_64 readline-devel.x86_64 compat-readline43.x86_64 ncurses-devel.x86_64 db4-devel.x86_64 automake* autoconf* -y

 

 

Donwload and Unpack#

 

cd /usr/src

wget ftp://ftp.sayclub.com/pub/languages/php/php-5.2.16.tar.bz2

tar xvjf php-5.2.16.tar.bz2

cd php-5.2.16

 

Knowledge#

Php는 아주 많은 기능들을 제공합니다. 이러다보니 Configure 옵션도 많아서 제대로 지정해주지 않으면 사용하지도 않는 기능이 내장이 된다거나 꼭 필요한 기능인데 shared module로 올린다거나 하는 불상사가 발생할 수 있습니다. 따라서 무엇이 필요한지 자주 사용되는 기능인지를 따져보는 것이 좋습니다.

 

Php의 많은 기능들은 컴파일할때 기능을 내장하는 Built in 방식과 필요한 기능만을 그때 그때 컴파일해서 붙여서 쓰는 shared 방식을 사용할 수 있습니다. 보통 Built in 방식으로 지정을하지 않으면 전부다 shared 방식으로 언제든지 붙여서 쓸수 있기 때문에 너무 걱정을 하지 않아도 됩니다.

 

Built in 방식은 보통 자주 쓰는 경우에 사용을하고 shared 방식은 가끔 쓰는 기능이 필요한 경우에 사용을 합니다. 따라서 Php가 어떤 목적으로 사용할 것인지를 알아야 필요한 기능을 Built in 할것인지를 알 수 있겠죠.

 

주요한 기능들은 다음과 같습니다.

 

  1. --with-pear     - php 라이브러리인 pear 를 지원.
  2. --with-gettext  - php내에 국제화를 위한 프로그램을 지원하기위해서 필요한 기능을 지원.
  3. --with-iconv     - 문자셋 변환을 위한 기능을 지원.
  4. --with-bz2      - 압축프로그램인 BZip2 기능을 지원.
  5. --with-gmp      - GNU MP 지원. GNU MP는 멀티 프로세싱을 위한 것입니다. 쓰레드, Fork 와는 또다른 병렬 프로그래밍 기법입니다.
  6. --with-apxs2    - apache2 와 연동 지원.
  7. --with-zlib      - ZLIB 지원.
  8. --with-mcrypt   - mcrypt 로 암호화 과련 기능을 지원.
  9. --with-mhash    - mhash 지원.
  10. --with-mysql     - mysql 데이터베이스 지원.
  11. --with-pdo-mysql  - pdo mysql 지원.
  12. --with-mysqli         - mysqli 지원.
  13. --with-pgsql      - pgsql 데이터베이스 지원.
  14. --with-pdo-pgsql  - pdo pgsql 지원.
  15. --with-xmlrpc      - xmlrpc 지원.
  16. --with-libxml-dir    - XML2 지원을 위한 libxml2 라이브러리 디렉토리 지정.
  17. --with-pcre-dir    - Perl Compatible Regular Expression 지원을 위한 라이브러리 디렉토리 지정.
  18. --with-gd          - GD 그래픽 지원.

  19. --with-native-ttf     - TrueType 문자열 지원.

  20. --with-jpeg-dir    - JPEG 그래픽 지원을 위한 라이브러리 디렉토리 지정.

  21. --with-png-dir     - PNG 그래픽 지원을 위한 라이브러리 디렉토리 지정.

  22. --with-xpm-dir     - XPM 그래픽 지원을 위한 라이브러리 디렉토리 지정.

  23. --with-ttf          - FreeType 폰트 지원.

  24. --with-freetype-dir - FreeType 폰트 라이브러리 디렉토리 지정.

  25. --enable-safe-mode      - safe mode 지원.

  26. --enable-zend-multibyte  - Zend 의 multibyte 지원.

  27. --enable-soap   - SOAP 웹 서비스 지원.

  28. --enable-curl     - cURL 지원.

  29. --enable-sockets  - fsockopen 과 같은 소켓 함수를 쓰기위해서는 필요합니다.

  30. --enable-zip        - Zip 파일을 읽고 쓸수 있는 기능 지원.

  31. --enable-magic-quotes  - '," 와 같은 것을 자동으로 처리해주는 기능을 제공합니다.

  32. --enable-mbstring   - multibyte 문자열 처리를 위한 지원.

  33. --enable-shmop      - Shared Memory Operations 으로서 공유메모리 접근 기능을 지원합니다. Windows 플랫폼은 사용할 수 없습니다. 여기를 참고하세요.

  34. --enable-pcntl(CLI/CGI only)  - Process Control 를 지원합니다. Windows 플랫폼은 사용할 수 없습니다.

  35. --enable-sysvmsg    - System V message 를 지원합니다. Windows 플랫폼은 사용할 수 없습니다. 여기를 참고하세요.

  36. --enable-sysvsem    - System V Semaphore 를 지원합니다. Windows 플랫폼은 사용할 수 없습니다. 여기를 참고하세요.

  37. --enable-sysvshm     - System V shared memory 를 지원합니다. Windows 플랫폼은 사용할 수 없습니다. 여기를 참고하세요.

  38. --enable-calendar    - Calendar Conversion 를 지원합니다.

  39. --enable-bcmath     - bc 스타일의 수학함수를 지원합니다.

  40. --enable-ftp         - ftp 지원.

  41. --enable-exif        - 이미지 메타정보 표시를 지원합니다.

  42. --enable-fastcgi     - FastCGI 지원.

 

주로 많이 사용하는 Configure 옵션들은 위와 같습니다. 자세히 보면 'with' 시작하는 것이 있고 'enable' 로 시작하는 것이 있는데, with 의 경우에는 외부의 라이브러리가 있어야 하며 enable은 php에 라이브러리를 내장하고 있어 기능을 켜는 역활을 합니다.

 

Configure 를 하기전에 위의 내용을 알고 있어야 자신에게 필요한 것을 Php에 내장시킬 수 있습니다. 여기에서는 큰틀에서 다음과 같은 것을 Php에 넣을 것입니다.

 

  1. Apache 웹서버 연동. --with-apxs2 옵션 설정 필요.

  2. Mysql 데이터베이스 연동. --with-mysql, --with-pdo-mysql 옵션 설정 필요.

  3. Pgsql 데이터베이스 연동. --with-pgsql, --with-pdo-pgsql 옵션 설정 필요.

  4. 그래픽 이미지 지원. --with-gd, gd-native-ttf, jpg, png, freetype 기능이 필요함.

  5. xml 처리를 위한 기능이 필요. --with-libxml 옵션 설정 필요.

  6. pear 기능 필요. --with-pear 옵션 설정 필요.

  7. 기타 부가적인 기능들 필요. gettext, bz2, mcrypt, mbstring, magic quotas, iconv 등등

 

1~3까지는 설치 노트에 있는대로 설치를 한 것으로 간주했습니다. 나머지 설치를 위한 라이브러리 설치를 먼저 진행을 합니다. 즉 다음과 같습니다.

 

  • Apache2 - /usr/local/apache2

  • Mysql - /usr/local/mysql5.5

  • PostgreSQL - /usr/local/pgsql-9.0

 

 

--with-gd를 위한 CentOS Lib 설치.#

yum install gd.x86_64 gd-devel.x86_64

 

--with-jpeg-dir 를 위한 CentOS Lib 설치.#

yum install libjpeg.x86_64 libjpeg-devel.x86_64

 

--with-png-dir 를 위한 CentOS Lib 설치.#

yum install libpng.x86_64 libpng-devel.x86_64

 

--with-freetype-dir 를 위한 CentOS Lib 설치.#

yum install freetype.x86_64 freetype-devel.x86_64

 

--with-libxml-dir 를 위한 CentOS Lib 설치.#

yum install libxml2.x86_64 libxml2-devel.x86_64

 

--with-bz2 를 위한 CentOS Lib 설치.#

yum install bzip2.x86_64 bzip2-devel.x86_64

 

--with-gettext 를 위한 CentOS Lib 설치.#

yum install gettext.x86_64 gettext-devel.x86_64

 

--with-jpeg-dir 를 위한 CentOS Lib 설치.#

yum install libmcrypt.x86_64 libmcrypt-devel.x86_64

 

--with-mhash 를 위한 CentOS Lib 설치.#

yum install mhash.x86_64 mhash-devel.x86_64

 

--with-gmp 를 위한 CentOS Lib 설치.#

yum install gmp-devel.x86_64 gmp.x86_64

 

이외에도 필요한 기능들을 포함하면 한번쯤 CentOS 라이브러리를 패키지를 살펴봐야 합니다.

 

Configure and Compile#

이제 컴파일을 위한 Configure 는 다음과 같습니다.

 

./configure --prefix=/usr/local/php5.2.16 \

--with-libdir=lib64 \

--with-apxs2=/usr/local/apache2/bin/apxs \

--with-mysql=/usr/local/mysql5.5 \

--with-pdo-mysql=/usr/local/mysql5.5 \

--with-mysqli=/usr/local/mysql5.5/bin/mysql_config \

--with-pgsql=/usr/local/pgsql9.0 \

--with-pdo-pgsql=/usr/local/pgsql9.0 \

--with-pear \

--with-libxml-dir=/usr \

--with-gettext \

--with-iconv \

--with-zlib \

--with-mcrypt \

--with-mhash \

--with-gd \

--with-jpeg-dir=/usr \

--with-png-dir=/usr \

--with-freetype-dir=/usr \

--with-bz2 \

--enable-gd-native-ttf \

--enable-zip \

--enable-mbstring \

--enable-zend-multibyte \

--enable-safe-mode

 

make

make install

cp php.ini-recommended /usr/local/php5.2.16/lib/php.ini

 

Apache PHP Configure#

Apache 웹서버에서 PHP 컴파일을 인식시켜야 합니다. 이를 위해서 아파치에 설정을 해야 합니다.

 

]# cd /usr/local/apache2/conf/extra

]# vim httpd-php.conf

<IfModule php5_module>

    <FilesMatch "\.(htm|html|php)$">

        SetHandler application/x-httpd-php

    </FilesMatch>

 

    <FilesMatch "\.phps$">

        SetHandler application/x-httpd-php-source

    </FilesMatch>

 

    DirectoryIndex index.htm index.html index.php

</IfModule>

]# vim /usr/local/apache2/conf/httpd.conf

#Php settings

Include conf/extra/httpd-php.conf

 

]# /usr/local/apache2/bin/apachectl restart

'Dev > PHP' 카테고리의 다른 글

FreeTDS 설치 (PHP와 MS-SQL 연동)  (0) 2011.05.13
CentOS 64bit Apache PHP 컴파일 설치  (2) 2011.05.13
PHP 암호화 함수정리  (0) 2011.05.07
[PHP] Thread safe / non Thread safe  (2) 2011.04.19
upload_max_filesize  (0) 2011.04.19

http://cafe.naver.com/q69/34250암호화

암호화(Cryptography)는 일종의 예술이다. 암호문은 몇 개의 단어를 바꾼 로마의 궤변에서부터 요즘에 사용하는 공개 키와 개인 키(public and private key) 메커리즘에 이르기까지 여러 세기에 걸쳐 사용되었다. 암호화의 목적은 지정된 사람 이외에는 누구도 볼 수 없는 암호문을 만드는 것이다.

이제 몇 페이지에 요즈음 인터넷에서 사용되는 몇 가지 암호화 방식과 동작 원리, 사용대상 등에 대해 살펴보도록 하자.

단방향 암호화

이 방식은 원문을 해독할 수 없도록 암호화하는 과정이다. 언뜻 들으면 사용할 수 없는 방법 같지만 실제 컴퓨터 분야에서는 많이 사용되는 방법이다.

단방향 암호화에 사용되는 알고리즘은 자주 해싱 알고리즘(hashing algorithms)이라고 부른다. 이것은 원문을 이용해 고유한 문자열을 만들어 내는 과정이다. PHP에서 가장 널리 사용되는 해싱 알고리즘은 MD5 알고리즘이다. 이 알고리즘의 실제 동작 방식에 대해서는 자세히 설명하지 않지만 이 방식은 어떤 문자열을 받아서 128비트로 된 고유한 값(fingerprint)을 만들어 내는 것이다.

현재 이 고유한 값을 이용해 거꾸로 원래의 문자열을 알아내는 방법은 불가능하다고 생각된다. 또한 두 가지 문자열에서 생성된 값이 서로 같게 될 확률도 거의 없다. 이 시스템을 완전히 난공불락으로 생각할 수도 있지만, 예상 가능한 문자열을 이용해 무작위로 입력해 그 결과를 비교하는 방법에는 취약하다. 이 공격에 필요한 시간은 해시 데이터의 복잡성에 따라 다르지만 짧은 암호 해독에 걸리는 시간은 그리 길지 않다.

암호가 안전하기만 하다면 MD5 알고리즘은 암호를 암호화하는 좋은 방법이다. 그 이유는 원래의 암호를 다시 해독할 수는 없지만 로그인 시에 사용자가 입력한 암호를 해시로 만들어 비교할 수는 있기 때문이다.

일반 텍스트로 저장된 암호는 보안상 매우 위험하면 MD5 알고리즘을 이용해 변환된 값을 저장해야 한다. 사용자가 로그인해 자신의 암호를 입력하면 이것은 MD5 암호화 과정을 거치게 된다. 만일 이 해시 값이 이미 저장되어 있던 것과 같으며, 두 개의 암호는 서로 같다고 판단된다.

간단한 암호를 사용하는 것은 브루트 포스 공격(brute force attack)의 대상이 되기 때문에 매우 위험하다는 것을 명심하기 바란다. 안전한 암호를 선택하는 방법은 이 장의 끝에 나와 있는 참고 자료를 이용하면 된다.

PHP의 md5() 함수는 다음과 같이 문자열을 입력받아 고유한 값을 만들어 낸다:

<?php
$fingerprint = md5($password);
?>

Important

MD5 알고리즘은 다양한 용도로 사용된다. 그 중하나는 파일이 수정되었는지를 확인할 때 사용된다는 것이다. 파일의 MD5 해시를 저장해 두면 이 파일이 변경되었는지를 금방 확인할 수 있다.


CRC32 함수도 비슷한 기능을 한다. CRC32 함수는 128비트가 아닌 32비트의 고유 값을 생성하기 때문에 암호에는 적당하지 않다. 따라서 두 개의 입력 값이 같은 결과를 나타탤 확률이 더 높다.

MD5와 CRC32 함수 이외에, PHP는 mhash 라이브러리를 제공한다. 이 추가적인 알고리즘는 mhash() 함수를 이용한다. 이 함수는 두 개 또는 세 개의 인자를 사용한다. 첫 번째 인자는 알고리즘을 나타내는 상수, 두 번재 인자는 해시로 만들 문자열, 세 번째 인자는 해싱 알고리즘에서 사용되는 키(key)이다. 다음은 MD5 알고리즘과 mhash()를 이용한 해싱의 예이다:

<?php
$passphrase = "this is my secret passphrase";
echo("My passpharse hashed using md5 is: ");
echo(mhash(MASH_MD5, $passphrase));
?>

mhash를 지원하는 주요 알고리즘은 다음과 같다. 좀더 자세한 정보는 http://mhash.sourceforce.net/ 을 참고하면 된다.

알고리즘
특징

CRC32
이 알고리즘은 주로 데이터 전송 시에 체크섬(checksums)을 위해 사용된다. mhash는 이 알고리즘을 위해 두 가지를 제공하는데, MHASH_CRC32는 주로 이더넷 통신에서 사용되면 MHASH_CRC32는 ZIP 프로그램에서 사용된다.

MD5
md5() 함수의 알고리즘이다. 상수 MHASH_MD5를 사용한다.

MD4
MD4는 MD5와 비슷하지만 보안성이 떨어진다. MD5로 대체되었기 때문에 MD4를 사용하지 않는다. MHASH_MD4 상수를 사용한다.

SHA1
이 알고리즘은 NIST의 디지털 서명 표준을 사용된다. 상수 MHASG_SHA1을 사용한다.

HAVAL
MD5의 변형 판으로 다양한 길이의 결과를 갖는다. mhash에서는 MHASH_HAVAL256, MHASH_MAVAL192, MHASH_HAVAL160, MHASH_HAVAL128 등을 사용한다.

RIPEMD160
MD4, MD5, RIPEMD를 대체하기 위해 설계된 160비트 알고리즘이다. 그러나 여전히 MD5가 많이 사용되고 있다. 상수 MHASH_RIPEMD160을 이용한다.

TIGER
TIGER은 매우 빠른 해싱 기능을 위해 설계되었다. 원래 64비트 컴퓨터에서 사용하려고 설계되었지만 다른 컴퓨터에서 그다지 느리지는 않다. 상수 MHASH_TIGER192, MHASH_TIGER160, MHASH_TIGER128을 사용한다.

GOST
러시아의 디지털 서명 표준으로 256비트를 지원한다. 상수 MHASH_GOST를 사용한다.


대칭형 암호화(Symmetric Encryption)

키(key)를 이용해 문자열을 암호화하는 방버이다. 전송자와 수신자가 알고 있는 키를 이용해 동일한 알고리즘에서 문자열을 암호화/복호화 한다. 2차 세계 대전 중에 암호화 기계(enigma machine)에 사용된 방식이다.

이 암호화 방식은 많은 약점과 문제점이 있다. 그 중 하나는 전송자와 수신자가 키를 알고있는 유일한 사람들인지를 확인하는 것이다. 만일 누군가 타인이 키를 얻어 암호화 된 메시지를 가로챈다면 이 메시지를 해석하는 것은 매우 간단한 일이다. 일반적으로 생각해서 만일 키를 안전하게 보관할 수만 있다면 이 방식은 매우 안전하다. PHP에서는 mcrypt 라이브러리를 이용해서 다양한 알고리즘을 이용하는 호스트에 접근할 수 있다.

mcrypt에서 사용되는 일반적인 암호화 방식은 다음과 같다. 보다 자세한 정보는 http://mcrypt.hellug.gr/mcrypt/mcrypt.html을 참고했다.

알고리즘
특징

DES
전통적인 DES 알고리즘으로 키의 길이가 작아 비교적 보안에 취약하다. 상수 MCRYPT_DES를 사용한다.

3DES/Triple DES
DES의 변형 판이다. 유효 키 길이는 112비트이다. 상수 MCRYPT_3DES를 사용한다.

CAST-128
캐나다에서 설계된 알고리즘으로 128비트 키와 64비트 블럭을 가진다. 상수 MCRYPT_CAST_128을 사용한다.

CAST-256
CAST-128의 확장 판으로 알고리즘으로 256비트 키와 128비트 블럭을 가진다. 상수 MCRYPT_CAST_256을 사용한다.

XTEA
128비트 키와 64비트 브럭을 가진다. 상수 MCRYPT_XTEA를 사용한다.

3-WAY
96비트 키와 블럭을 가진다. 상수 MCRYPT_THREEWAY를 사용한다.

SKIPJACK
미국 NSA에서 조건부 암호화 표준으로 설계한 알고리즘이지만 표준화되지 못했다. mcryp에서 추가 라이브러리를 이용해 접근할 수 있으며 80비트 키를 가진다. 상수 MCRYPT_SKIPJACK를 사용한다.

BLOWFISH
DES를 개선한 알고리즘으로 최대 448비트 길이의 키를 사용할 수 있다. 상수 MCRYPT_BLOWFISH를 사용한다.

TWOFISH
보안성이 높고 융통성이 있다. 128, 192, 256비트 키를 지원한다. 상수 MCRYPT_TWOFISH를 사용한다.

LOKI97
128, 192, 256비트 길이의 키를 이용한다. 상수 MCRYPT_LOKI97를 사용한다.

RC2
블럭 크기를 64비트이며 키는 8에서 1024비트이다. 오래된 알고리즘으로 16비트 컴퓨터에 적당하다. 상수 MCRYPT_RC2를 사용한다.

ARCFOUR/RC4
RC4는 RSADSL의 상표이므로 mcrypt는 RC4 알고리즘을 지원하지 않지만 ARCFOUR와 호환된다. 스트림 기반의 암호문과 최대 2048 비트 키를 지원한다. 상수 MCRYPT_ARCFOUR를 사용한다.

RIJNDAEL
가변적인 길의 블럭 암호문과 키를 가진다. 상수 MCRYPT_RIJNDAEL_128, MCRYPT_RIJNDAEL_192, MCRYPT_RIJNDAEL_256을 사용한다.

SERPENT
128비트 블럭 암호문으로 DES보다 빠르다. 상수 MCRYPT_SERPENT를 사용한다.

IDEA
64비트 블럭과 128비트 키를 사용한다. 상수 MCRYPT_IDEA를 사용한다.

ENIGMA/CRYPT
하나의 원통을 가진 암호화 기계를 기반으로 해서 보안성이 낮다. 상수 MCRYPT_CRYPT를 사용한다.

GOST
256비트 키와 64비트 블럭을 가진다. 상수 MCRYPT_GOST를 사용한다.

SAFER
64비트, 128비트 키를 지원하는 빠르고 안전한 알고리즘이다. 상수 MCRYPT_SAFER64, MCRYPT_SAFER128을 사용한다.

SAFER+
SAFER 알고리즘의 확장판으로 128, 196, 256비트 키를 지원한다. 상수 MCRYPT_SAFERPLUS를 사용한다.


예를 들어, 3DES 알고리즘을 사용하려면 다음과 같이 키를 이용해 문자열을 암호화한다:

<?php
$key = "This is our secret key";
$string = "This is ths string that we want to encrypt"; // 문자열 암호화
$encrypted_message = mcrypt_ech(MCRYPT_3DES, $key, $string, MCRYPT_ENCRYPT);
?>

이 메시지를 해독하려면 $encrypted_message를 문자열로 해서 MCRYPT_DECRYPT 상수를 이용하면 된다. 위의 코드를 mcrypt 2.2.x와 2.4.x에서 동작한다. mcrypt 2.4.x 함수가 좀더 더 유연한 기능을 제공하므로 이 함수를 사용하기를 권한다.

비대칭 암호화

비대칭 암호화(Asymmetric encryption)는 몇 년 전부터 일반인들이 사용할 수 있게 되었다. 이 방식은 상자와 자물쇠로 생각하면 이해가 쉽다. 예를 들어, 제인이 앨리스에게 보내는 비밀 메시지를 가지고 있다면 앨리스는 제인에게 열려있는 자물쇠를 보낼 수 있다. 제인은 자신의 메시지를 상자에 넣고 앨리스가 보내준 자물쇠를 이용해 상자를 잠근다.

이제 상자를 열과 메시지를 읽을 수 있는 유일한 사람은 앨리스인데 열쇠는 앨리스만이 가지고 있기 때문이다.

비대칭 암호화를 이용할 때는 자신의 공개 키(pubic key)를 보내야 한다. 이 공개 키를 열려져 있는 자물쇠라고 생각해보자. 누구든지 이 열려진 자물쇠를 이용해 여러분에게 비밀 메시지를 보낼 수 있고 개인 키(private key)는 여러분이 가지고 있으므로 이 자물쇠를 열수 있는 유일한 사람이 된다.

이 시스템은 인터넷에서 흔히 사용된다. 만일 인터넷에서 물건을 구입하거나 PGP(Pretty Good Privacy)를 사용한다면 이 시스템을 이용하는 것이다.

PHP는 OpenSSL을 이용해 이 시스템을 지원한다. 또한 OpenSSL은 CURL을 이용해 리모트 서버에 SSL(Secure Socket Layer)로 연결할 수 있다. 사용되는 세부 알고리즘은 상당히 복잡하다. 이 장의 마지막에 있는 참고 정버를 이용하면 많은 정보를 얻을 수 있다. 비대칭 암화는 다른 것보다 좀더 안전하다.

'Dev > PHP' 카테고리의 다른 글

FreeTDS 설치 (PHP와 MS-SQL 연동)  (0) 2011.05.13
CentOS 64bit Apache PHP 컴파일 설치  (2) 2011.05.13
PHP Configure Option  (0) 2011.05.13
[PHP] Thread safe / non Thread safe  (2) 2011.04.19
upload_max_filesize  (0) 2011.04.19

+ Recent posts