paulenot
@paulenot
IT Issue

Как на стороне сервера закрыть соединение с кодом 200?

Я передаю удаленной машине без curl запрос, а сервер в свою очередь игнорирует обрыв с пользователем и продолжает исполнение скрипта ignore_user_abort(true);, после чего я отдаю пользователю echo 'false'; т.к. ответ еще не готов. После чего передаю код 200 http_response_code(200); и закрываю соединение EventHttpRequest::closeConnection();.

Но клиентская сторона получает совсем другой ответ:
PHP Warning:  failed to open stream: HTTP request failed! HTTP/1.0 500 Internal Server Error

Как закрыть соединение передав только false, что бы клиент не ждал выполнения скрипта?
  • Вопрос задан
  • 179 просмотров
Решения вопроса 1
paulenot
@paulenot Автор вопроса
IT Issue
Увидел такое решение с перенаправлением на сайте php.net в комментариях. Создал отдельный файл false.php и перенаправил пользователя туда. Тем временем скрипт выполняется, а пользователь уже отсоединен:
ignore_user_abort(true);
			set_time_limit(0);
			header("Location: /false.php", true);
			header("Connection: close", true);
			header("Content-Encoding: none\r\n");
			header("Content-Length: 0", true);
			flush();
			ob_flush();

Вся эта история нужна была для многопоточного выполнения команд. Производительность скрипта выросла в сотню раз.
Для сравнения:
Без ожидания: 122 задач выполнено за 28.913190126419 сек.
С ожиданием: 122 задач выполнено за 401.40130519867 сек.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Сначала http_response_code, а потом echo.
Азы протокола НТТР. Заголовки идут перед телом ответа.

Впрочем, это может быть и любая другая ошибка. К примеру, никакого класса EventHttpRequest нет и в помине.
Чтобы не получать "совсем другой ответ", ошибки надо логировать, читать и исправлять.

Стандартная функция, которая закрывает соединение - fastcgi_finish_request()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
25 апр. 2024, в 19:22
18000 руб./за проект
25 апр. 2024, в 19:21
10000 руб./за проект
25 апр. 2024, в 18:47
2795100 руб./за проект