Example #1
0
 /**
  * Generates a random number
  *
  * Not verbatim WordPress, keeps seed value in backpress options.
  *
  * @since WP 2.6.2
  *
  * @param int $min Lower limit for the generated number (optional, default is 0)
  * @param int $max Upper limit for the generated number (optional, default is 4294967295)
  * @return int A random number between min and max
  */
 function rand($min = 0, $max = 0)
 {
     global $rnd_value;
     $seed = backpress_get_transient('random_seed');
     // Reset $rnd_value after 14 uses
     // 32(md5) + 40(sha1) + 40(sha1) / 8 = 14 random numbers from $rnd_value
     if (strlen($rnd_value) < 8) {
         $rnd_value = md5(uniqid(microtime() . mt_rand(), true) . $seed);
         $rnd_value .= sha1($rnd_value);
         $rnd_value .= sha1($rnd_value . $seed);
         $seed = md5($seed . $rnd_value);
         backpress_set_transient('random_seed', $seed);
     }
     // Take the first 8 digits for our value
     $value = substr($rnd_value, 0, 8);
     // Strip the first eight, leaving the remainder for the next call to wp_rand().
     $rnd_value = substr($rnd_value, 8);
     $value = abs(hexdec($value));
     // Reduce the value to be within the min - max range
     // 4294967295 = 0xffffffff = max random number
     if ($max != 0) {
         $value = $min + ($max - $min + 1) * ($value / (4294967295 + 1));
     }
     return abs(intval($value));
 }
/**
 * Send request to run cron through HTTP request that doesn't halt page loading.
 *
 * @since 2.1.0
 *
 * @return null Cron could not be spawned, because it is not needed to run.
 */
function spawn_cron($local_time = 0)
{
    if (!$local_time) {
        $local_time = time();
    }
    if (defined('DOING_CRON') || isset($_GET['doing_wp_cron'])) {
        return;
    }
    /*
     * do not even start the cron if local server timer has drifted
     * such as due to power failure, or misconfiguration
     */
    $timer_accurate = check_server_timer($local_time);
    if (!$timer_accurate) {
        return;
    }
    /*
     * multiple processes on multiple web servers can run this code concurrently
     * try to make this as atomic as possible by setting doing_cron switch
     */
    $flag = backpress_get_transient('doing_cron');
    if ($flag > $local_time + 10 * 60) {
        $flag = 0;
    }
    // don't run if another process is currently running it or more than once every 60 sec.
    if ($flag + 60 > $local_time) {
        return;
    }
    //sanity check
    $crons = _get_cron_array();
    if (!is_array($crons)) {
        return;
    }
    $keys = array_keys($crons);
    if (isset($keys[0]) && $keys[0] > $local_time) {
        return;
    }
    if (defined('ALTERNATE_WP_CRON') && ALTERNATE_WP_CRON) {
        if (!empty($_POST) || defined('DOING_AJAX')) {
            return;
        }
        backpress_set_transient('doing_cron', $local_time);
        ob_start();
        wp_redirect(add_query_arg('doing_wp_cron', '', stripslashes($_SERVER['REQUEST_URI'])));
        echo ' ';
        // flush any buffers and send the headers
        while (@ob_end_flush()) {
        }
        flush();
        @(include_once ABSPATH . 'wp-cron.php');
        return;
    }
    backpress_set_transient('doing_cron', $local_time);
    $cron_url = remove_query_arg('check', backpress_get_option('cron_uri'));
    $cron_url = add_query_arg('doing_wp_cron', '', $cron_url);
    wp_remote_post($cron_url, array('timeout' => 0.01, 'blocking' => false, 'sslverify' => apply_filters('https_local_ssl_verify', true)));
}