get_meta_tags()およびget_headers()PHP関数を使用しており、Webサイトが遅いか応答しない場合に備えて、タイムアウト値を設定する必要があります。誰かがそれを行う方法を知っていますか?
4 に答える
default_socket_timeout
ini設定を使用して、これに影響を与えることができるはずです(URLラッパーを介して) 。
php.ini
ファイルに設定するか、次のようにしてみてください
ini_set('default_socket_timeout', 10);
10秒のタイムアウトを設定します(デフォルト値は60です)
get_headers
andget_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_header
get_headers
を自動的に入力するため、さらに呼び出す必要はありません。
$originalDefaults = stream_context_set_default( … );
$meta = get_meta_tags( … );
stream_context_set_default($originalDefaults);
var_dump($http_response_header);
@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
}
}
@ 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;