매크로를 이용하여 extension에서 ini 세팅하는 법.
#include "php_ini.h"
...
PHP_INI_BEGIN()
PHP_INI_ENTRY("myext.strval", "Hello World", PHP_INI_ALL, NULL)
PHP_INI_END()
...
PHP_INI_BEGIN()
PHP_INI_ENTRY("myext.strval", "Hello World", PHP_INI_ALL, NULL)
PHP_INI_END()
"myext.strval" => ini 이름
"Hello World" => ini 값
PHP_INI_ALL => 접근 레벨
PHP_INI_ALL : php.ini, .htaccess, ini_set() 수정가능
PHP_INI_SYSTEM|PHP_INI_PERDIR : php.ini, .htaccess 에서만 수정가능
PHP_INI_SYSTEM : php.ini 에서만 수정가능
NULL => ini 가 수정될 경우 호출되는 callback 함수
ini 값 뽑아먹는 매크로
앞(INI_XXX)은 현재값이고 뒤(INI_ORIG_XXX)는 원래 정의되어 있는 값
INI_STR("myext.strval") / INI_ORIG_STR("myext.strval")
INI_INT() / INI_ORIG_INT()
INI_FLT() / INI_ORIG_FLT()
INI_BOOL() / INI_ORIG_BOOL()
ini 값 수정 callback 함수.
// 다음은 myext.strval 값이 변경되려 할 때마다 호출된다.
// 변경되려 하는 문자열의 길이가 0 이면 변경불가
ZEND_INI_MH(php_myext_modify_strval)
{
if (new_value_length == 0) {
return FAILURE;
}
return SUCCESS;
}
PHP_INI_BEGIN()
PHP_INI_ENTRY("myext.strval", "Hello World", PHP_INI_ALL, php_myext_modify_strval);
PHP_INI_END()
// ZEND_INI_MH(php_myext_modify_strval) 매크로를 풀어내면 아래와 같은 함수형태
int php_myext_modify_strval(zend_ini_entry *entry,
char *new_value, uint new_value_length,
void *mh_arg1, void *mh_arg2, void *mh_arg3,
int stage TSRMLS_DC);
entry : ini 구조체의 포인터. 그다지 신경쓰지 말자.
new_value : 변경하려는 문자열
new_value_length : 변경하려는 문자열 길이
mh_arg1, mh_arg2, mh_arg3 : 그다지 신경쓰지 말자.
stage : 변경하려 하는 시점 (STARTUP=MINIT, SHUTDOWN=MSHUTDOWN, ACTIVATE=RINIT, DEACTIVATE=RSHUTDOWN, RUNTIME=php 스크립트 실행시)
// 변경되려 하는 문자열의 길이가 0 이면 변경불가
ZEND_INI_MH(php_myext_modify_strval)
{
if (new_value_length == 0) {
return FAILURE;
}
return SUCCESS;
}
PHP_INI_BEGIN()
PHP_INI_ENTRY("myext.strval", "Hello World", PHP_INI_ALL, php_myext_modify_strval);
PHP_INI_END()
// ZEND_INI_MH(php_myext_modify_strval) 매크로를 풀어내면 아래와 같은 함수형태
int php_myext_modify_strval(zend_ini_entry *entry,
char *new_value, uint new_value_length,
void *mh_arg1, void *mh_arg2, void *mh_arg3,
int stage TSRMLS_DC);
entry : ini 구조체의 포인터. 그다지 신경쓰지 말자.
new_value : 변경하려는 문자열
new_value_length : 변경하려는 문자열 길이
mh_arg1, mh_arg2, mh_arg3 : 그다지 신경쓰지 말자.
stage : 변경하려 하는 시점 (STARTUP=MINIT, SHUTDOWN=MSHUTDOWN, ACTIVATE=RINIT, DEACTIVATE=RSHUTDOWN, RUNTIME=php 스크립트 실행시)
phpinfo() 시 ini 값 나타낼 때는 다음과 같이 해줌.
PHP_MINFO_FUNCTION(myext)
{
DISPLAY_INI_ENTRIES();
}
{
DISPLAY_INI_ENTRIES();
}
ini와 모듈전역변수 연결
// String
STD_PHP_INI_ENTRY_EX(
"myext.strval", // ini 이름
"Hello World", // ini 값
PHP_INI_ALL, // access level
OnUpdateStringUnempty, // 변경시 빈문자열이면 변경불가. 빈문자열도 허용하려면 OnUpdateString
strval, // 모듈전역변수 중 연결하고자 하는 변수
zend_myext_globals, myext_globals) // 모듈전역변수 관련
// Long
STD_PHP_INI_ENTRY("myext.longval", "123", PHP_INI_ALL, OnUpdateLong, mylong,
zend_myext_globals, myext_globals)
// Double
STD_PHP_INI_ENTRY("myext.doubleval", "3.14", PHP_INI_ALL, OnUpdateDouble, mydouble,
zend_myext_globals, myext_globals)
// Boolean 값을 "on", "off"로 하고 싶다면 다음 매크로 사용
STD_PHP_INI_BOOLEAN("myext.boolval", "1", PHP_INI_ALL, OnUpdateBool, mybool,
zend_myext_globals *, myext_globals)
// Boolean 값을 문자열 그대로 하고 싶다면 다음 매크로 사용
STD_PHP_INI_ENTRY("myext.boolval", "1", PHP_INI_ALL, OnUpdateBool, mybool,
zend_myext_globals, myext_globals)
STD_PHP_INI_ENTRY_EX(
"myext.strval", // ini 이름
"Hello World", // ini 값
PHP_INI_ALL, // access level
OnUpdateStringUnempty, // 변경시 빈문자열이면 변경불가. 빈문자열도 허용하려면 OnUpdateString
strval, // 모듈전역변수 중 연결하고자 하는 변수
zend_myext_globals, myext_globals) // 모듈전역변수 관련
// Long
STD_PHP_INI_ENTRY("myext.longval", "123", PHP_INI_ALL, OnUpdateLong, mylong,
zend_myext_globals, myext_globals)
// Double
STD_PHP_INI_ENTRY("myext.doubleval", "3.14", PHP_INI_ALL, OnUpdateDouble, mydouble,
zend_myext_globals, myext_globals)
// Boolean 값을 "on", "off"로 하고 싶다면 다음 매크로 사용
STD_PHP_INI_BOOLEAN("myext.boolval", "1", PHP_INI_ALL, OnUpdateBool, mybool,
zend_myext_globals *, myext_globals)
// Boolean 값을 문자열 그대로 하고 싶다면 다음 매크로 사용
STD_PHP_INI_ENTRY("myext.boolval", "1", PHP_INI_ALL, OnUpdateBool, mybool,
zend_myext_globals, myext_globals)
'PHP' 카테고리의 다른 글
[PHP Extension] 클래스 (Class) (0) | 2010.08.06 |
---|---|
[PHP Extension] lxr.php.net (OpenGrok) (0) | 2010.08.05 |
[PHP Extension] Auto Globals (0) | 2010.08.04 |
[PHP Extension] Extension Globals (모듈 전역변수) (0) | 2010.08.04 |
[PHP Extension] 상수 (Constants) (0) | 2010.08.04 |