0

cUrlが無効になっているサーバーでwordpressWP_Cronに問題があります。基本的に、cronを呼び出すとサーバーがブロックされます。なぜこれが発生するのか、Webサーバーの構成に関連しているのかどうか疑問に思っています。

これはコードです

    $arrContext = array('http' =>
        array(
            'method' => strtoupper($r['method']),
            'user_agent' => $r['user-agent'],
            'max_redirects' => $r['redirection'] + 1, // See #11557
            'protocol_version' => (float) $r['httpversion'],
            'header' => $strHeaders,
            'ignore_errors' => true, // Return non-200 requests.
            'timeout' => $r['timeout'],// here i have 10
            'ssl' => array(
                    'verify_peer' => $ssl_verify,
                    'verify_host' => $ssl_verify
            )
        )
    );

    $proxy = new WP_HTTP_Proxy();

    if ( $proxy->is_enabled() && $proxy->send_through_proxy( $url ) ) {
        $arrContext['http']['proxy'] = 'tcp://' . $proxy->host() . ':' . $proxy->port();
        $arrContext['http']['request_fulluri'] = true;

        // We only support Basic authentication so this will only work if that is what your proxy supports.
        if ( $proxy->use_authentication() )
            $arrContext['http']['header'] .= $proxy->authentication_header() . "\r\n";
    }

    if ( ! empty($r['body'] ) )
        $arrContext['http']['content'] = $r['body'];

    $context = stream_context_create($arrContext);

    if ( !WP_DEBUG )
        $handle = @fopen($url, 'r', false, $context);
    else
        $handle = fopen($url, 'r', false, $context);
            error_log('after');
    if ( ! $handle )
        return new WP_Error('http_request_failed', sprintf(__('Could not open handle for fopen() to %s'), $url));

    $timeout = (int) floor( $r['timeout'] );
    $utimeout = $timeout == $r['timeout'] ? 0 : 1000000 * $r['timeout'] % 1000000;
    stream_set_timeout( $handle, $timeout, $utimeout );

    if ( ! $r['blocking'] ) {
        stream_set_blocking($handle, 0);
        fclose($handle);
        return array( 'headers' => array(), 'body' => '', 'response' => array('code' => false, 'message' => false), 'cookies' => array() );
    }

タイムアウトを10に設定すると、wp_cronの呼び出しに対してエラーログが出力されず、代わりにこのエラーが発生します。

PHP警告:fopen(http://localhost/wordpress/wp-cron.php?doing_wp_cron = 1350494198.1313750743865966796875)[function.fopen]:ストリームを開くことができませんでした:HTTPリクエストが失敗しました!C:\ Program Files(x86)\ Zend \ Apache2 \ htdocs \ wordpress \ wp-includes \ class-http.php(925行目)

fopen()これを引き起こすのはサーバー上の構成ですか?呼び出しは、リソースが正しく応答するのを待つことを意味しないと思いましたか?

4

1 に答える 1

0

デフォルトでは、リクエストが失敗することがあり、基本的にwp_cronが次回再試行できるため、タイムアウトは非常に短くなります(0.01秒など)。非常に長い間隔に変更したようですので、目立ちます。このTracスレッドを見てください。あなたが持っているなら、あなたはdefine('WP_DEBUG',true);これをいつも見るでしょう。重要なことは何も心配していないのではないかと思います。それは実際に問題を引き起こしていますか?私自身、そのせいで問題に気づいたことはありません。

于 2012-10-17T20:52:58.963 に答える