Sessionモジュールのコリジョン発生率
この件ですが。この人には、この辺(1・2)をよく見てもらうとして。。。と。
1台だけで運用している場合は問題ないと思いますが、複数台あった時は(やはり)気になりますね。。。
コリジョン発生率が下がる事を願ってタコさんパッチ。種に「SERVER_ADDR」を追加しただけなんですけど。
事前にこのパッチを当ててから、以下のパッチを当てて下さい。PHP5.1.2も似たような感じで適用できると思います。
--- php-4.4.2/ext/session/session.c,orig 2006-03-06 08:48:07.000000000 +0900 +++ php-4.4.2/ext/session/session.c 2006-03-07 10:22:12.000000000 +0900 @@ -637,6 +637,9 @@ zval **array; zval **token; char *remote_addr = NULL; + zval **array2; + zval **token2; + char *server_addr = NULL; gettimeofday(&tv, NULL); @@ -648,10 +651,19 @@ remote_addr = Z_STRVAL_PP(token); } + if (zend_hash_find(&EG(symbol_table), "_SERVER", + sizeof("_SERVER"), (void **) &array2) == SUCCESS && + Z_TYPE_PP(array2) == IS_ARRAY && + zend_hash_find(Z_ARRVAL_PP(array2), "SERVER_ADDR", + sizeof("REMOTE_ADDR"), (void **) &token2) == SUCCESS) { + server_addr = Z_STRVAL_PP(token2); + } + buf = emalloc(100); - /* maximum 15+19+19+10 bytes */ - sprintf(buf, "%.15s%ld%ld%0.8f", remote_addr ? remote_addr : "", + /* maximum 15+15+19+19+10 bytes */ + sprintf(buf, "%.15s%.15s%ld%ld%0.8f", remote_addr ? remote_addr : "", + server_addr ? server_addr : "", tv.tv_sec, tv.tv_usec, php_combined_lcg(TSRMLS_C) * 10); switch (PS(hash_func)) {