웹모아
웹모아[손님] 검색   로그인 / 회원가입    



 
환경설정
 


mbstring - PHP 확장모듈을 추가하는 방법
  2008-02-22 14:30:35 댓글:(0)   조회:1350


[PHP 확장모듈을 추가하는 방법] 

- 작성자 : 김칠봉 <san2(at)linuxchannel.net> 
- 작성일 : 2003.03.02 
- 분 류  : PHP 
- 수 준  : 초급 
- 내 용  : PHP 확장모듈 mbstring.so을 추가하는 방법(예제) 
- 키워드 : PHP, extension, modules, mbstring.so 

*주) 
이 문서에 대한 최신 내용은 아래 URL에서 확인할 수 있습니다. 

http://www.linuxchannel.net/docs/php-ext.txt 

--------------------------------------------------------- 
목차 
1. PHP 확장 모듈과 추가하는 방법에 대해서 
2. 확장 모듈 만들기 
  2-1. 기본 모듈의 컴파일 방식 
  2-2. phpize 를 이용한 컴파일 방식 
3. 확장 모듈 로딩하기 
  3-1. root 권한일 경우 
  3-2. account 권한일 경우 
--------------------------------------------------------- 


1. PHP 확장 모듈과 추가하는 방법에 대해서 

PHP 확장 모듈은 제공 형태에 따라서 크게 두가지로 볼 수 있습니다. 

  - PHP 소스의 ext 디렉토리에 존재하는 모듈(기본 확장 모듈) 
  - 사용자 직접 만들거나 기타 다른 확장 모듈 

전자의 경우는 

# cd php-xxx/ext 
# ls 
aspell 
... 
dio 
... 
mbstring 
... 

이와 같이 확인할 수 있습니다. 
(90개가 넘는 확장 모듈이 있음) 

후자는 
php-xxx/ext/ext_skel 를 이용하여 사용자가 직접 만든 확장모듈을 
의미합니다. oops.org 에서 배포한 korean.so 확장 모듈이 이에 
해당됩니다. 

우선 웹서버가 이런 PHP 확장 모듈(예: mbstring.so)를 로딩해야 하는데 
로딩하는 방법은 크게 두가지 정도가 있습니다. 

  - 아파치 코어에 PHP를 정적으로 컴파일하는 방법 
  - shared mbstring.so 모듈을 만드는 방법 

전자의 방법은 처음부터 Apache + PHP를 다시 빌드함을 의미하고, 
후자의 방법은 PHP 확장모듈을 현재 상태에서 추가하는 방법입니다. 

후자의 경우에서 주의할 점이 있는데, 
아파치에서는 mod_so.c 모듈이 정적으로 아파치 core 에 컴파일되어 
있어야 합니다. 

*확인예) 

# httpd -l 
... 
mod_so.c 
... 

전자의 방법은 생략하고, 후자의 방법에도 서로 다른 방법이 
있습니다. 즉, 

  - 첫번째, 기존 모듈의 컴파일 방식 
  - 두번째, phpize 를 이용한 컴파일 방식 

결과는 동일하지만 두번째 방식은 주로 PHP에서 공식적으로 
제공하지 않는 모듈을 추가할때 기존 php.net에서 제공한 PHP 소스 
없이 컴파일하는 방법입니다. 

mbstring.so 모듈은 PHP에서 제공하기 때문에 첫번째 방식을 사용하면 
됩니다. 

우선 PHP 확장 모듈을 정적으로 아파치코어에 넣지 않고, PHP의 
shard 모듈로 빌드하기 위해서, 

  --enable-mbstring=shared 

이와 같이 'shared'를 붙여줘야 mbstring.so 모듈을 만들수 있습니다. 
PHP 4.3 버전은 --with-mbstring=kr,shared 
이와 같이 하면 됩니다.(실제로 4.3은 직접 해보질않아서) 


2. 확장 모듈 만들기 

2-1. 기본 모듈의 컴파일 방식 

우선 현재 아파치에서 사용하는 PHP 버전을 알아봅니다. 
(phpinfo(), phpversion() 또는 HTTP 응답헤더에도 나옴) 

만약 4.2.1 버전을 사용한다면, 
php-4.2.1.tar.gz 버전을 받아서 임시 디렉토리에 풉니다. 
만약 서로 다른 버전일 경우 잘 안될 경우가 있으므로 
가능한 현재 사용하는 같은 버전으로 하는 것이 좋습니다. 

# tar zxvf php-4.2.1.tar.gz 
# cd php-4.2.1 
# ./configure --enable-mbstring=shared 
# cd ext/mbstring 
# make 

이렇게 컴파일하면 

php-4.2.1/ext/mbstring/.libs/mbstring.so 
or 
php-4.2.1/modules/mbstring.so 

파일이 만들어집니다. 


2-2. phpize 를 이용한 컴파일 방식 

이 방법은 앞서 얘기 했듯이 PHP에서 제공하지 않는 확장 모듈을 
컴파일할 때, 즉 기존(php.net에서 제공한)의 PHP 소스가 없을 
경우에 사용하는 방법입니다. 

대부분 이런 모듈은, 

# php-xxx/ext/ext_skel --extname=xxx 

이와 같이 기본 layout을 만들고 확장 모듈 xxx를 C로 코딩하는 
방법을 말합니다. 

이에 대한 자세한 내용은, 

  - http://phpschool.com/classroom/phpext/phpext_1.html 

앞의 URL을 방문하기 바랍니다. 

*예: xxx 확장모듈) 

# ls /usr/local/php/bin (or /usr/bin) 
pear  pearize  php  php-config  phpextdist  phpize  phptar 

# cd xxx 
# /usr/local/php/bin/phpize (configure 파일이 만들어짐) 
# ./configure  
  --with-php-config=/usr/local/php/bin/php-config  
  --enable-xxx 
# make 
# ls module/*.so 
xxx.so 



3. 확장 모듈 로딩하기 

3-1. root 권한일 경우 

만들어진 PHP 확장 mbstring.so 모듈을 아파치가 로딩하도록 

php.ini 파일을 다음과 같이 수정합니다. 

예) 
-- php.ini ---------------- 
... 
extension_dir = /usr/local/php/modules 
... 
extension = dba.so 
extension = dio.so 
extension = oci8.so 
extension = mbstring.so ; <-- 추가 
... 
---------------------------- 

이렇게 수정했으면 mbstring.so 모듈을 

  /usr/local/php/modules/mbstring.so 

으로 복사해야 합니다. 

그리고 아파치를 재가동하고 phpinfo() 등으로 
확인해 보세요. 


3-2. account 권한일 경우 

만약, 
자신이 root 권한이 없는 계정 입장이라면, 
만들어지 mbstring.so 모듈을 웹서버에 복사하고 
php 파일에 직접 로딩하는 방법도 있습니다. 

우선 php.ini 설정이 어떻게 되어 있는지 다음과 같이 
확인해 봅니다. 

PHP 4.2.0 이상이면 ini_get_all() 로도 가능 

<?php 
echo 'enable_dl : ' . ini_get('enable_dl') .'<BR>'; 
echo 'extension_dir : ' . ini_get('extension_dir'); 
?> 

만약 'enblae_dl : 1(or On)'이 아니면 dl() 함수를 사용하여 
사용자가 직접 확장 모듈을 로딩하지 못하므로 1(or On)으로 
설정되어 있어야 합니다. 

또한 extension_dir 설정은 사용자가 직접 설정하지 
못하는 상수 4의 값을 값습니다. 
즉 이 설정은 php.ini 또는 httpd.conf 파일에서만 
설정가능합니다. 

따라서 
관리자가 설정한 extension_dir 값을 보고 상대경로로 
mbstring.so 모듈을 지정하여 해야 합니다. 

만약 extension_dir : ./ 로 출력된다면 dl() 함수를 
직접 호출 또는 이 함수를 포함하는 PHP 파일이 그 기준입니다. 
(상당히 골치아픈 설정 T.T) 

즉 모든 웹서버의 extension_dir 설정값이 모두 다르므로 
반드시 확인해서 상대경로로 지정해야 합니다. 

따라서 여러 시스템에서 호환성을 고려한다면 
extension_dir 의 값을 / 로 거슬러 올라가 / 를 기준으로 
mbstring.so 파일이 있는 경로를 지정해주는 것이 좋습니다. 

*예) 
<?php 
function get_extdir() 

  $dir[e] = ini_get('extension_dir'); 
  $dir[u] = dirname($_SERVER[PATH_TRANSLATED]).'/'; // script file directory 
  $dir[ut] = preg_replace(';[^/]+;','..',$dir[u]); 

  if(preg_match(';^/;',$dir[e])) { 
    $dir[e] = preg_replace(';[^/]+;','..',$dir[e]); 
  } 
  else $dir[e] = ''; 

  return $dir; // array 


function ext_load($dir, $mod) 

  if(preg_match(';^/;',$mod)) { 
    if(!$dir[e]) $file = $dir[ut] . $mod; 
    else $file = $dir[e] . $mod; 
  } else { 
    if(!$dir[e]) $file = $mod; 
    else $file = $dir[e] . $dir[u] . $mod; 
  } 

  if(is_file($file)) { 
    $ext = str_replace('.so','',basename($file)); 
    if(!extension_loaded($ext)) @dl($file); 
  } 

  if(!extension_loaded($ext)) { 
    echo $file.' is not loaded'; 
  } 


// example 
// 
$extdir = get_extdir(); 
ext_load($extdir, '/any/path/to/mbstring.so'); 
phpinfo(); 

?> 


좀더 자세한 디버깅과 여러 모듈을 한꺼번에 로딩하기를 원한다면 
아래의 필자의 허접한 php class 를 사용해 보기 바랍니다. 

  http://ftp.linuxchannel.net/devel/php_dl/



 댓글 (0)


환경설정
페이지: 1 / 2   


   PHP.INI에서의 세션 관련 설정5216
   [PHP] $_SERVER3539
   php 에서 세션시간설정1354
   업로드 용량과 관련한 php.ini 파일 설정1302
mbstring - PHP 확장모듈을 추가하는 방법1351
     [RE] mbstring - PHP 확장모듈을 추가1473
   타도메인간 쿠키 공유하기1726
   home 데이타 백업 스크립트1307
   cron 이용 일정시간마다 php문실행2118
   cron, crontab, PHP 소스 자동실행, 1582
   crontab 에서 php 파일 실행이 가능한지요?1426
   crontab php 스크립트 실행문제입니다.(1) 1302
   2차 도메인과의 세션고유1530
   POST로 값을 넘길때, 만료된 페이지입니다 문제의(홈마스타)3120
   세션(로그인)시간 무한대로 늘리기 초간단 초보용(홈마스타)(2) 1409
   php mysql 세션 관리(홈마스타)2667
   세션을 DB로 관리하기 + 쪽지 확인하기(홈마스타)(1) 1610
   브라우져를 종료해도 세션이 그대로 살아있어요(홈마스타)2465
   PHP에서 세션 사용하기(홈마스타)1404
   [설치/설정] PHP 파일업로드시 일정용량 이상 업(홈마스타)1272
   php.ini 값 설정가능한 범위 알아보기(홈마스타)1537
   PHP 슈퍼전역변수 들의 종류(홈마스타)19582
   쿠키공유를 위한 헤드값(홈마스타)1416
   php.ini 설정하기(홈마스타)1425
   php.ini (V4.2.3) - III(홈마스타)1399
   php.ini (V4.2.3) - II(홈마스타)1438
   환경을 실행중에 임시로 바꾸기(홈마스타)1299
   php.ini (V4.2.3)(홈마스타)1500
   error_reporting(홈마스타)1795
   경과만료 페이지 없애기(홈마스타)1634
[1]  [2]  

복수단어 검색은 공백(space)로 구분해 주세요. 1




 
최근 글
[손님]

인기 글
[손님]
[깊은연못] 24시간 Classical Radio
[홈마스타] [RE] input type=\\
[홈마스타] 실습-테이블구조변경
[홈마스타] setinterval 사용과 중지