7

次のphpコードのスニペットがあります

if($fp = fopen($url, 'r')) {
    stream_set_timeout($fp, 1); 
    stream_set_blocking($fp, 0);

}
$info = stream_get_meta_data($fp);

リクエストが 1 秒後にタイムアウトすることを希望します。読んでいるのにを入れると、sleep(20)20秒間待機するだけで、タイムアウトすることはありません。$urlでタイムアウトを行うより良い方法はありますfopenか?

ini_set('default_socket_timeout',2)上記のコードを使用すると、適切にタイムアウトしますが、$infoその後 null になるため、理想的にはストリーム関数を使用したいと思います。

4

1 に答える 1

12

stream_context_create()http コンテキスト オプションtimeoutを使用できます。ただしfopen()、タイムアウトが発生した場合は false を返し、機能しstream_get_meta_data()ません。

$url = 'http://...';
$context = stream_context_create( array(
  'http'=>array(
    'timeout' => 2.0
  )
));
$fp = fopen($url, 'r', false, $context);
if ( !$fp ) {
  echo '!fopen';
}
else {
  $info = stream_get_meta_data($fp);
  var_dump($info);
}
于 2010-03-24T21:01:45.723 に答える