14

get_meta_tags()およびget_headers()PHP関数を使用しており、Webサイトが遅いか応答しない場合に備えて、タイムアウト値を設定する必要があります。誰かがそれを行う方法を知っていますか?

4

4 に答える 4

19

default_socket_timeoutini設定を使用して、これに影響を与えることができるはずです(URLラッパーを介して) 。

php.iniファイルに設定するか、次のようにしてみてください

ini_set('default_socket_timeout', 10);

10秒のタイムアウトを設定します(デフォルト値は60です)

于 2011-05-18T20:12:15.790 に答える
7

get_headersandget_meta_tags関数は、その下にあるデフォルトのHTTPストリームラッパーを使用しますこのページの他の場所に示されているようにini設定を変更するか、そのラッパーの動作を変更して特定のタイムアウトを設定することができます。

stream_context_set_default(
    array(
        'http' => array(
            'timeout' => 5
        )
    )
);

デフォルトのHTTPストリームコンテキストを変更すると、それを使用するすべての関数に適用されることに注意してください。タイムアウトを元のデフォルト設定に戻す場合は、次のようにします。

$originalDefaults = stream_context_set_default( … );
$meta = get_meta_tags( … );
stream_context_set_default($originalDefaults);

ちなみに、HTTP Stream Wrapperを使用して関数を呼び出すと、PHPは現在のスコープに変数$http_response_headerget_headersを自動的に入力するため、さらに呼び出す必要はありません。

$originalDefaults = stream_context_set_default( … );
$meta = get_meta_tags( … );
stream_context_set_default($originalDefaults);
var_dump($http_response_header);
于 2012-10-28T11:42:46.110 に答える
0

@Gordonによって投稿されたように、get_headersを使用してこれを実行しますが、配列ではなくstream_context_set_default戻り値ressourceを返すため、同じ関数にフィードバックする方法がわかりません。配列が必要です。

$originalDefaults = stream_context_set_default( … );
$meta = get_meta_tags( … );
stream_context_set_default($originalDefaults);
var_dump($http_response_header);

php 7.1では、に3番目のパラメーターが追加されましたget_headers。だから私はこれを思いついた。古いPHPバージョンでは、オプションはget headers呼び出しにのみ追加されます。それ以外の場合、古いphpバージョンでの方法を誰かが説明するまで、スクリプト実行の残りの部分はデフォルトのままになります。

function ngt_headers( $url ) {

    $opts['http']['timeout'] = 2;

    if ( version_compare(PHP_VERSION, '7.1.0', '>=') ) {
        $context = stream_context_create( $opts );
        return @get_headers( $url, 0, $context ); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged
    } else {
        stream_context_set_default( $opts );
        return @get_headers( $url ); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged
    }
}
于 2019-10-05T18:15:44.777 に答える
0

@ redanimalwar、デフォルトオプションを取得して、コンテキストに戻すにはどうでしょうか。次のようになります。

    $opts['http']['timeout'] = 2;

    $headers = null;
    if (version_compare(PHP_VERSION, '7.1.0', '>=')) {
        $context = stream_context_create($opts);
        $headers =  @get_headers($url, 0, $context);
    } else {
        $defaultOptions = stream_context_get_options(stream_context_get_default());
        stream_context_set_default($opts);
        $headers = @get_headers($url);
        stream_context_set_default($defaultOptions);
    }

    return $headers;
于 2020-05-04T10:33:24.487 に答える