MINIT : 모듈 초기화. 아파치 프로세스가 생성되면서 모듈을 로드할 때 호출.
MSHUTDOWN : 모듈 종료. 아파치 프로세스가 종료되면서 모듈을 언로드할 때 호출.
RINIT : Request 초기화. 페이지가 요청될 때마다 발생. 요청된 페이지에서 해당 모듈을 사용하지 않아도 호출됨.
RSHUTDOWN : Request 종료. 페이지 요청이 끝날 때마다 발생. 요청된 페이지에서 해당 모듈을 사용하지 않아도 호출됨.
ModuleI initialization / termination
- 모듈 전역 변수 할당(초기화) / 해제
- class entry 등록 / 해제
- INI entry 등록 / 해제
- 상수 등록 / 해제
Request initialization / termination
- 요청에 특화된 변수 할당(초기화) / 해제
다음 예제소스는 각 단계에서 OutputDebugString으로 시점을 검사할 수 있도록 했음.
stdafx.h
#pragma once
#include "zend_config.w32.h"
#include "php.h"
#include "php_myext.h"
#include "tchar.h"
#include "zend_config.w32.h"
#include "php.h"
#include "php_myext.h"
#include "tchar.h"
php_myext.h
#ifndef PHP_MYEXT_H
#define PHP_MYEXT_H 1
#define PHP_MYEXT_VERSION "1.0"
#define PHP_MYEXT_EXTNAME "myext"
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
extern "C" {
#ifdef ZTS
#include "TSRM.h"
#endif
}
PHP_MINIT_FUNCTION(myext);
PHP_MSHUTDOWN_FUNCTION(myext);
PHP_RINIT_FUNCTION(myext);
PHP_RSHUTDOWN_FUNCTION(myext);
PHP_FUNCTION(myext_func);
extern zend_module_entry myext_module_entry;
#define phpext_myext_ptr &myext_module_enrty;
#endif
#define PHP_MYEXT_H 1
#define PHP_MYEXT_VERSION "1.0"
#define PHP_MYEXT_EXTNAME "myext"
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
extern "C" {
#ifdef ZTS
#include "TSRM.h"
#endif
}
PHP_MINIT_FUNCTION(myext);
PHP_MSHUTDOWN_FUNCTION(myext);
PHP_RINIT_FUNCTION(myext);
PHP_RSHUTDOWN_FUNCTION(myext);
PHP_FUNCTION(myext_func);
extern zend_module_entry myext_module_entry;
#define phpext_myext_ptr &myext_module_enrty;
#endif
myext.cpp
#include "stdafx.h"
static function_entry myext_functions[] = {
PHP_FE(myext_func, NULL)
{NULL, NULL, NULL}
};
zend_module_entry myext_module_entry = {
#if ZEND_MODULE_API_NO >= 20010901
STANDARD_MODULE_HEADER,
#endif
PHP_MYEXT_EXTNAME,
myext_functions,
PHP_MINIT(myext),
PHP_MSHUTDOWN(myext),
PHP_RINIT(myext),
PHP_RSHUTDOWN(myext),
NULL,
#if ZEND_MODULE_API_NO >= 20010901
PHP_MYEXT_VERSION,
#endif
STANDARD_MODULE_PROPERTIES
};
extern "C" {
ZEND_GET_MODULE(myext)
}
PHP_MINIT_FUNCTION(myext)
{
OutputDebugString(_T("MINIT\n"));
return SUCCESS;
}
PHP_MSHUTDOWN_FUNCTION(myext)
{
OutputDebugString(_T("MSHUTDOWN\n"));
return SUCCESS;
}
PHP_RINIT_FUNCTION(myext)
{
OutputDebugString(_T("RINIT\n"));
return SUCCESS;
}
PHP_RSHUTDOWN_FUNCTION(myext)
{
OutputDebugString(_T("RSHUTDOWN\n"));
return SUCCESS;
}
PHP_FUNCTION(myext_func)
{
OutputDebugString(_T("myext_func\n"));
}
static function_entry myext_functions[] = {
PHP_FE(myext_func, NULL)
{NULL, NULL, NULL}
};
zend_module_entry myext_module_entry = {
#if ZEND_MODULE_API_NO >= 20010901
STANDARD_MODULE_HEADER,
#endif
PHP_MYEXT_EXTNAME,
myext_functions,
PHP_MINIT(myext),
PHP_MSHUTDOWN(myext),
PHP_RINIT(myext),
PHP_RSHUTDOWN(myext),
NULL,
#if ZEND_MODULE_API_NO >= 20010901
PHP_MYEXT_VERSION,
#endif
STANDARD_MODULE_PROPERTIES
};
extern "C" {
ZEND_GET_MODULE(myext)
}
PHP_MINIT_FUNCTION(myext)
{
OutputDebugString(_T("MINIT\n"));
return SUCCESS;
}
PHP_MSHUTDOWN_FUNCTION(myext)
{
OutputDebugString(_T("MSHUTDOWN\n"));
return SUCCESS;
}
PHP_RINIT_FUNCTION(myext)
{
OutputDebugString(_T("RINIT\n"));
return SUCCESS;
}
PHP_RSHUTDOWN_FUNCTION(myext)
{
OutputDebugString(_T("RSHUTDOWN\n"));
return SUCCESS;
}
PHP_FUNCTION(myext_func)
{
OutputDebugString(_T("myext_func\n"));
}
결과
1. MINIT (아파치 프로세스가 생성될 때)
2. RINIT (페이지 요청 시작)
3. RSHUTDOWN (페이지 요청 종료)
4. MSHUTDOWN (아파치 프로세스 종료)
'PHP' 카테고리의 다른 글
[PHP Extension] Data types used by Zend/PHP (0) | 2010.08.02 |
---|---|
[PHP Extension] 함수, 파라메터 (0) | 2010.07.28 |
[PHP Extension] 함수 만들기 (Visual C++) (0) | 2010.07.28 |
[PHP Extension] Visual C++ 에서 Windows, Linux 용 PHP Extension 동시 개발 (2) | 2010.07.28 |
[PHP Extension] Apache 2.2 + PHP 5.2 + PHP Extension (Linux) (0) | 2010.07.27 |