http://www.php.net/manual/ja/function.srand.php を見ると、
注意: PHP 4.2.0 以降、 srand() または mt_srand() によりランダム数生成器にシードを与える必要はありません。 これは、この処理が自動的に行われるためです。
と、あったので、どんなもんかと検索してみたところ http://d.hatena.ne.jp/yoya/20080807 に行き着いた。
で、実際どうなってるんだ?と思いソースを調べてみた。
/ext/standard/rand.c の65行目に
php_srand(GENERATE_SEED() TSRMLS_CC);
があって、これが /ext/standard/php_rand.h の 52行目の
#define GENERATE_SEED() ((long) (time(0) * getpid() * 1000000 * php_combined_lcg(TSRMLS_C)))
で、php_combined_lcgは /ext/standard/lcg.c にあって、そこからlcg_seed()に行き着いたんだけど、
if (gettimeofday(&tv, NULL) == 0) {
LCG(s1) = tv.tv_sec ^ (~tv.tv_usec);
} else {
LCG(s1) = 1;
}
以下の部分でなぜランダムになるのか良くわからず。。