ます’s Blog - どうでもいい記事100選

どうでもいい記事100選

Sessionモジュールのコリジョン発生率

このですが。この人には、この辺()をよく見てもらうとして。。。と。
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)) {