/** * 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))); }