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"



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




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"));
}






결과

1. MINIT (아파치 프로세스가 생성될 때)
2. RINIT (페이지 요청 시작)
3. RSHUTDOWN (페이지 요청 종료)
4. MSHUTDOWN (아파치 프로세스 종료)


Posted by bloodguy
,