Как я могу ограничить время, которое PHP-включение будет ожидать результата? - PullRequest
1 голос
/ 04 июня 2009

Я включаю локальный класс, который запрашивает файл с удаленного сервера. Этот процесс довольно ненадежен - поскольку удаленный сервер часто перегружен - и мне иногда приходится ждать около 20 секунд, прежде чем включение сдается и продолжается.

Я бы хотел ограничить время выполнения включенного скрипта; скажем, пять секунд.

Текущий код:

include('siteclass.class.php');

Обновление:

Мой код внутри класса:

$movie = str_replace(" ","+",$movie);
$string = join('',file($siteurl.$l.'/moviename-'.$movie));

if(!$i) { static $i = 1;}
if($file_array = $string)
{
    $result = Return_Substrings($file_array, '<item>', '</item>');

    foreach($result as $res) {

Вот и все, что касается загрузки. Внутренняя обработка занимает около 0,1 с. Я думаю, это довольно выполнимо.

Ответы [ 4 ]

1 голос
/ 04 июня 2009

Обратите внимание, что я не тестировал этот код, примите это как предложение:

$fp = fopen('siteclass.class.php', 'r');

stream_set_timeout($fp, 2);
stream_set_timeout($fp,$timeout);
$info = stream_get_meta_data($fp);

if ($info['timed_out']) {
  echo "Connection Timed Out!";
} else {
  $file = '';
  while (!feof($fp)) {
    $file .= fgets($fp);
  }
  eval($file);
}

Тайм-аут задается в секундах, поэтому в примере он устанавливается на две секунды.

0 голосов
/ 04 июня 2009

Похоже, set_time_limit() может делать то, что вы хотите:

Руководство по PHP для этой функции

0 голосов
/ 04 июня 2009

Исправьте включенный код, чтобы иметь время ожидания для HTTP-запроса, а затем восстановите его, а не просто прерывайте, установив ограничение времени для самого сценария.

Мой совет - разобраться в корне проблемы, а не искать обходной путь.

0 голосов
/ 04 июня 2009

Это не совсем соответствует тому, что вы ищете, но это установит ограничение по времени для включения и выполнения в общей сложности 25 секунд. Если ограничение по времени достигнуто, выдается фатальная ошибка.

set_time_limit(25);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...