Тайм-аут длинного скрипта PHP - PullRequest
0 голосов
/ 20 октября 2018

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

Мне интересно, какой лучший способ сохранить соединение, будь то отправка точек на экран или что-то еще, просто чтобы сохранить соединение.

Вот мой сценарий

$ssh = new Net_SSH2('hostname');
if (!$ssh->login('username', 'password')) {
    exit('Login Failed');
}

$ansi = new File_ANSI();
$ssh->enablePTY();
$ssh->setTimeout(60);
$ssh->exec("./test.sh | awk 'NR >= 16 {print}'\n");
$ansi->appendString($ssh->read());
echo $ansi->getHistory();

Любая помощь или руководство высоко ценится.

Ответы [ 3 ]

0 голосов
/ 20 октября 2018

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

Таким образом, на стороне пользователя он будет работатьзапрос ajax (javascript) к URL-адресу php, затем при успешном выполнении вы выводите результат.

$.ajax({
  url: "/thescript.php":,
  type: "POST",
  datatype: "POST"
  success: function(){
    //do display stuff
  }

});

Возможно, добавит разумное время ожидания.

0 голосов
/ 20 октября 2018

Не пытайтесь выполнить долго выполняющиеся сценарии на веб-странице.

Если вам нужен ответ из другой системы и у вас есть доступ по SSH, разделите вызов задачи исбор результатов в 2 отдельных шага (см. ссылку выше и обсуждение, на которое он ссылается, для получения некоторых советов о том, как выполнить вызов).Поместите временное перенаправление с первой страницы на вторую.

0 голосов
/ 20 октября 2018

Время ожидания, на которое вы ссылаетесь, скорее всего, ограничено временем выполнения скрипта [очень распространено на виртуальном хостинге]

И с этим вы мало что можете сделать, к сожалению.

Однако, что вы можете сделать, это [если вы контролируете сервер, с которого вызывается скрипт], это

  1. отправить запрос на удаленный сервер [включая URL обратного вызова webhook]
  2. Сценарий должен сделать свое дело
  3. Сценарий должен запустить webhook для обработки результатов

Конечно, это также имеет значение длякак должна обрабатываться обработка / отображение, но у меня недостаточно информации, чтобы вдаваться в подробности этого ответа.

...