Пример #1
0
 function getUrl()
 {
     $args = func_get_args();
     $class = array_shift($args);
     $request = Request::getCurrent();
     return $request->getDispatcher()->reverse($class, $args);
 }
Пример #2
0
 static function getRandomBytes($len)
 {
     // XXX: Move this to a utility class
     $windows = !strncasecmp(PHP_OS, 'WIN', 3);
     if ($windows) {
         if (function_exists('openssl_random_pseudo_bytes') && version_compare(PHP_VERSION, '5.3.4', '>=')) {
             return openssl_random_pseudo_bytes($len);
         }
         // Looks like mcrypt_create_iv with MCRYPT_DEV_RANDOM is still
         // unreliable on 5.3.6:
         // https://bugs.php.net/bug.php?id=52523
         if (function_exists('mcrypt_create_iv') && version_compare(PHP_VERSION, '5.3.7', '>=')) {
             return mcrypt_create_iv($len);
         }
     } else {
         if (function_exists('openssl_random_pseudo_bytes')) {
             return openssl_random_pseudo_bytes($len);
         }
         static $fp = null;
         if ($fp == null) {
             $fp = @fopen('/dev/urandom', 'rb');
         }
         if ($fp) {
             return fread($fp, $len);
         }
         if (function_exists('mcrypt_create_iv')) {
             return mcrypt_create_iv($len, MCRYPT_DEV_URANDOM);
         }
     }
     $request = Request::getCurrent();
     $seed = microtime() . getmypid();
     if ($request) {
         $seed .= $request->getSettings()->get('SECRET_SALT');
     }
     if ($request && $request->session) {
         $seed .= $request->session->getSessionKey();
     }
     $start = mt_rand(5, PHP_INT_MAX);
     $output = '';
     for ($i = $start; strlen($output) < $len; $i++) {
         $output .= hash_hmac('sha1', $i, $seed, true);
     }
     return substr($output, 0, $len);
 }