если таймаут file_get_contents, сделать что-то еще - PullRequest
1 голос
/ 31 марта 2020

У меня есть кусок кода для file_get_contents, и он работает нормально, но иногда исходный URL-адрес не отвечает, и из-за этого моя страница не загружается в течение 60 секунд (после тайм-аута по умолчанию). Я хочу установить тайм-аут на 5 секунд для file_get_contents, чтобы сделать что-то еще, если исходный URL не отвечает в течение 5 секунд. это мой код:

  <?php 
$url = 'https://www.example.com';
$content = file_get_contents($url);
$first_step = explode( '<div class="js-price-value">' , $content );
$second_step = explode("</div>" , $first_step[1] );
$second_step[0]= str_replace( " ", "",  $second_step[0]);
if (strlen(trim($second_step[0]))!==0) {
 $price=$second_step[0];

 echo $price;  

}else {
   echo '<div>something else</div>'
};
?>

Я хочу что-то вроде этого после кода выше:

if source url dose not respond in 5 seconds
{
do something else
}

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

Мой ответ: Я видел эту топи c до Есть ли у file_get_contents () настройка тайм-аута? , но это не совсем то, что я хочу. Я хотел сделать что-то еще, если тайм-аут случится. поэтому я использовал этот код:

$ctx = stream_context_create(array(
   'http' => array(
       'timeout' => 5
       )
   )
);
$url = 'source URL';
$content = file_get_contents("$url", 0, $ctx);
if(!$content){
   echo 'timeout happened';

}elseif (another condition) {
   echo 'condition result'

}else {
   echo 'something else'
}
0 голосов
/ 31 марта 2020

Это то, что вы ищете:

file_get_contents("https://abcedef.com", 0, stream_context_create(["http"=>["timeout"=>1]]));

sr c: Имеет ли file_get_contents () значение времени ожидания?

Пометка вопроса как дублирующего для удаления.

...