#php #ajax #apache #iis #fastcgi
#php #ajax #apache #iis #fastcgi
Вопрос:
Я хочу выполнить PHP-запрос, даже если сеанс Ajax закрыт со стороны пользователя. Мне удается сделать это на Apache, добавив ignore_user_abort(True)
в свой php-файл, но он не работает в IIS 10 с FASTCGI. безуспешно пытался найти какое-либо решение в Google. Я использую PHP версии 7.4 и IIS версии 10 на Windows server 2019.
ниже приведен только тестовый код для открытия файла и вывода состояния соединения. он отлично работает в Apache, но в IIS он перестает писать, когда сеанс закрыт.
<?php
ignore_user_abort ( TRUE );
echo "hellon";
$x=0;
$log_filename = ".\test.txt";
while (@ ob_end_flush());
while ($x<100)
{
echo($x ."n");
$status = connection_aborted();
file_put_contents($log_filename, $x ." - " .$status ."n", FILE_APPEND);
$x ;
@ flush();
sleep(1);
}
?>
Комментарии:
1. Похоже, это старая ошибка (с 2011 года): bugs.php.net/bug.php?id=60586#1378935714 . Тем не менее, он по-прежнему помечен как открытый.
2. @Magnus я видел эту ошибку, но это было для версии 5.3, я использую версию 7.4
3. Да, но проблема может быть все той же. Последний комментарий с той же проблемой был с 2017 года.
Ответ №1:
Вы можете попробовать использовать fastcgi_finish_request()
эту функцию, которая сбрасывает все данные ответа клиенту и завершает запрос. Это позволяет выполнять трудоемкие задачи, не оставляя соединение с клиентом открытым.
Комментарии:
1. Спасибо за ваш ответ, но я не хочу закрывать соединение, поскольку я возвращаю данные во время работы. Основная цель здесь — вернуть пользователю текущие данные, и если он закроет вкладку или браузер, скрипт продолжит работу до конца.