示例#1
0
/**
 * 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)
{
    /*
     * 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;
    }
    //sanity check
    $crons = _get_cron_array();
    if (!is_array($crons)) {
        return;
    }
    $keys = array_keys($crons);
    $timestamp = $keys[0];
    if ($timestamp > $local_time) {
        return;
    }
    $cron_url = get_option('siteurl') . '/wp-cron.php?check=' . wp_hash('187425');
    /*
     * 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 = get_option('doing_cron');
    // clean up potential invalid value resulted from various system chaos
    if ($flag != 0) {
        if ($flag > $local_time + 10 * 60 || $flag < $local_time - 10 * 60) {
            update_option('doing_cron', 0);
            $flag = 0;
        }
    }
    //don't run if another process is currently running it
    if ($flag > $local_time) {
        return;
    }
    update_option('doing_cron', $local_time + 30);
    wp_remote_post($cron_url, array('timeout' => 0.01, 'blocking' => false));
}
示例#2
0
/**
 * 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 = 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;
        }
        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();
        WP_DEBUG ? include_once ABSPATH . 'wp-cron.php' : @(include_once ABSPATH . 'wp-cron.php');
        return;
    }
    set_transient('doing_cron', $local_time);
    $cron_url = get_option('siteurl') . '/wp-cron.php?doing_wp_cron';
    wp_remote_post($cron_url, array('timeout' => 0.01, 'blocking' => false, 'sslverify' => apply_filters('https_local_ssl_verify', true)));
}