Использование ob_flush() в PHP при ожидании cURL

RedDeveloper
29.01.2023 05:54
Использование ob_flush() в PHP при ожидании cURL

Image By Growtikia

Одной из моих текущих функций на неделю, меня попросили реализовать cURL-запрос внутри PHP. Пока запрос cURL обрабатывается и ожидает завершения, пользователь должен видеть загрузчик на экране. После завершения вызова и получения данных от конечной точки API загрузчик должен исчезнуть, а пользователю должна быть показана полная страница.

Первое, что приходит на ум при попытке добиться этого, - сделать это на JavaScript. Однако в данном случае я не смог этого сделать. По соображениям безопасности мне нужно было реализовать эту функциональность на PHP.

Ob_flush в помощь!!!

С помощью встроенной функции php ob_flush браузер может получить часть содержимого PHP до того, как весь файл будет выполнен.

Это пример:

//the showPartial function is a function I made up for example purposes. 
//The showPartial function in theory would show a partial/section representing a secetion of the site. 
showPartial("loader.php");
ob_flush();
$url="https://new.aol.com/productsweb/subflows/ScreenNameFlow/AjaxSNAction.do?s=username&f=firstname&l=lastname";
$agent= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';

$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_URL,$url);
$result=curl_exec($ch);
showPartial("partial1.php");
showPartial("partial2.php");

В приведенном примере файл loader.php является первым, что выводится в браузер. Таким образом, пользователь сразу же увидит загрузчик, в то время как остальная часть PHP-файла продолжает выполняться.

Из недостатков, которые я сейчас пытаюсь устранить, - это установка файлов cookie. Видите ли, как только браузер получает файл loader.php, он больше не может устанавливать cookies. Это настоящий облом, потому что что если бы я хотел сохранить cookies в браузере после завершения выполнения запроса cURL.

Я уверен, что решение есть, и я обновлю этот пост, как только найду его.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?

20.08.2023 18:21

Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в 2023-2024 годах? Или это полная лажа?".

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией

20.08.2023 17:46

В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox

19.08.2023 18:39

Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в частности, магию поплавков и гибкость flexbox.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest

19.08.2023 17:22

В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для чтения благодаря своей простоте. Кроме того, мы всегда хотим проверить самые последние возможности в наших проектах!

Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️

18.08.2023 20:33

Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий их языку и культуре.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL

14.08.2023 14:49

Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип предназначен для представления неделимого значения.