今度の仕事でPHPのセッション管理に
session_pgsqlを使おうと思ったところ、PHP5だとZendEngine2の関数名の変更なんかでmakeが通らなくなっていたので、
PHP 拡張モジュール(PECL)のメモなんかを参考にsession_pgsql.cを修正してみた。
#当然ですが以下のpatchの適用については一切責任は持ちませんので、自己責任で使用してください。
-- ここから
--- session_pgsql.c.old2003-01-18 18:45:54.000000000 +0900
+++ session_pgsql.c2007-11-16 15:49:35.000000000 +0900
@@ -122,8 +122,8 @@
STD_PHP_INI_ENTRY("session_pgsql.keep_expired", "0", PHP_INI_SYSTEM, OnUpdateBool, keep_expired, php_session_pgsql_globals, session_pgsql_globals)
STD_PHP_INI_ENTRY("session_pgsql.use_app_vars", "0", PHP_INI_SYSTEM, OnUpdateBool, use_app_vars, php_session_pgsql_globals, session_pgsql_globals)
STD_PHP_INI_ENTRY("session_pgsql.serializable", "0", PHP_INI_SYSTEM, OnUpdateBool, serializable, php_session_pgsql_globals, session_pgsql_globals)
-STD_PHP_INI_ENTRY("session_pgsql.gc_interval", "3600", PHP_INI_SYSTEM, OnUpdateInt, gc_interval, php_session_pgsql_globals, session_pgsql_globals)
-STD_PHP_INI_ENTRY("session_pgsql.vacuum_interval", "21600", PHP_INI_SYSTEM, OnUpdateInt, vacuum_interval, php_session_pgsql_globals, session_pgsql_globals)
+STD_PHP_INI_ENTRY("session_pgsql.gc_interval", "3600", PHP_INI_SYSTEM, OnUpdateLong, gc_interval, php_session_pgsql_globals, session_pgsql_globals)
+STD_PHP_INI_ENTRY("session_pgsql.vacuum_interval", "21600", PHP_INI_SYSTEM, OnUpdateLong, vacuum_interval, php_session_pgsql_globals, session_pgsql_globals)
PHP_INI_END()
/* }}} */
@@ -199,7 +199,7 @@
}
/* init $_APP hash */
if (PS_PGSQL(use_app_vars)) {
-zend_register_auto_global("_APP", sizeof("_APP")-1 TSRMLS_CC);
+zend_register_auto_global("_APP", sizeof("_APP")-1, NULL TSRMLS_CC);
}
/* register pgsql session save handler */
@@ -794,7 +794,7 @@
PS_PGSQL(sess_notice) = (int)atoi(PQgetvalue(pg_result, 0, 4));
if (exp < now) {
*vallen = 0;
-*val = empty_string;
+*val = "";
PS_PGSQL(short_circuit) = 0; /* disable short circuit */
}
else {
@@ -1231,19 +1231,19 @@
add_assoc_string(return_value, "Address Created", PS_PGSQL(sess_addr_created), 1);
}
else {
-add_assoc_string(return_value, "Address Created", empty_string, 0);
+add_assoc_string(return_value, "Address Created", "", 0);
}
if (PS_PGSQL(sess_addr_modified)) {
add_assoc_string(return_value, "Address Modified", PS_PGSQL(sess_addr_modified), 1);
}
else {
-add_assoc_string(return_value, "Address Modified", empty_string, 0);
+add_assoc_string(return_value, "Address Modified", "", 0);
}
if (PS_PGSQL(sess_custom)) {
add_assoc_string(return_value, "Custom", PS_PGSQL(sess_custom), 1);
}
else {
-add_assoc_string(return_value, "Custom", empty_string, 0);
+add_assoc_string(return_value, "Custom", "", 0);
}
}
/* }}} */
@@ -1299,7 +1299,7 @@
if (PS_PGSQL(sess_custom) && PS_PGSQL(sess_custom)[0]) {
RETURN_STRING(PS_PGSQL(sess_custom), 1);
}
-RETURN_STRING(empty_string, 0);
+RETURN_STRING("", 0);
}
/* }}} */
@@ -1404,7 +1404,7 @@
}
else {
/* new session */
-add_assoc_string(return_value, "Error Message", empty_string, 0);
+add_assoc_string(return_value, "Error Message", "", 0);
}
PQclear(pg_result);
}
-- ここまで
やったことといえば
・OnUpdateInt → OnUpdateLongへ変更
・zend_register_auto_globalの引数にNULLを一つ増やした
・empty_string → ""へ変更
ぐらい。とりあえずこれでmakeは通って、試したところ一応モジュールも動いてるっぽいので大丈夫だとは思いますが…。
(追記)
パッチファイルをダウンロードできるようにしてみました。