lithium\util\String::_source PHP Method

_source() protected static method

When available, /dev/urandom and COM gets used on *nix and Windows systems, respectively. If all else fails, a Mersenne Twister gets used. (Strictly speaking, this fallback is inadequate, but good enough.) Note: Users restricting path access through the open_basedir INI setting, will need to include /dev/urandom into the list of allowed paths, as this method might read from /dev/urandom.
See also: lithium\util\String::$_source
protected static _source ( ) : Closure
return Closure Returns a closure containing a random number generator.
    protected static function _source()
    {
        switch (true) {
            case isset(static::$_source):
                return static::$_source;
            case is_readable('/dev/urandom') && ($fp = fopen('/dev/urandom', 'rb')):
                return static::$_source = function ($bytes) use(&$fp) {
                    return fread($fp, $bytes);
                };
            case class_exists('COM', false):
                try {
                    $com = new COM('CAPICOM.Utilities.1');
                    return static::$_source = function ($bytes) use($com) {
                        return base64_decode($com->GetRandom($bytes, 0));
                    };
                } catch (Exception $e) {
                }
            default:
                return static::$_source = function ($bytes) {
                    $rand = '';
                    for ($i = 0; $i < $bytes; $i++) {
                        $rand .= chr(mt_rand(0, 255));
                    }
                    return $rand;
                };
        }
    }