【まとめ】PHPでよく使う小関数【確率、ミリ秒、IP】
/** * 概率计算 * @param array('a'=>0.5, 'b'=>0.2) * @return string (key of array, eg. 'a' or 'b') */ function random($ps) { $arr = array(); $key = md5(serialize($ps)); if(!isset($arr[$key])) { $max = array_sum($ps); foreach($ps as $k => $v) { $v = $v / $max * 10000; for($i=0; $i<$v; $i++) { $arr[$key][] = $k; } } } return $arr[$key][mt_rand(0, count($arr[$key])-1)]; }
?
/** * 返回毫秒数 * * @return float */ function microtime_float() { list($a, $b) = explode(' ', microtime()); return ((float)$a + (float)$b) * 1000; }
?
/** * 取得客户端IP */ function get_client_ip(){ if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) $ip = getenv("HTTP_CLIENT_IP"); else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) $ip = getenv("REMOTE_ADDR"); else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) $ip = $_SERVER['REMOTE_ADDR']; else $ip = "unknown"; return($ip); }
...