rand() is the basic function to do it so why being usuall ?
The mersenne twister algorithm is quite faster and, to me at least, more random -produces less colissions-, though it's practically the same if you don't need a MASSIVE source of entropy.
You could also use a combination of mt_rand, fibonacci sequence and prime numbers to increase the entropy source, to get better numbers, or make the script store the last 10 numbers somewhere, and recalculate a random number if it appears on that list.
As it is stated on the php.net-site, mt_rand is a drop-in replacement for rand. They have the same result, but mt_rand is an better/faster way to get a random value.
Wherever you can, use mt_rand, I should say.
Yeah, I did a comparison and my dynamic sig did load faster with mt_rand ..
And true, it's really more random. I don't get repeats.