maler1988
@maler1988
Web-программист (1С Bitrix)

Почему header() срабатывает после вывода контента?

Есть модуль оплаты картой сбербанка, разрабатывали его программисты из сбербанка, там есть такой код:

<!-- тут уже идёт кусок станицы -->
<div class="sale-paysystem-wrapper">
  
    <? if (in_array($response['errorCode'], array(999, 1, 2, 3, 4, 5, 7, 8))) { //всякие проверки и вывод ошибок
        $error = GetMessage('RBS_PAYMENT_PAY_ERROR_NUMBER') . ' ' . $response['errorCode'] . ': ' . $response['errorMessage'];
        ?><span><?= $error ?></span><?
    } elseif ($response['errorCode'] == 0) {
        $_SESSION['ORDER_NUMBER'] = $order_number;

        /* комменты*/
        if ($request->get('ORDER_ID') && $request->get('PAYMENT_ID')){
               echo '<script>window.location="' . $response['formUrl'] . '"</script>';
        } else { //Этот header работать не должен
              header("Location:" . $response['formUrl']);
        }


В общем суть простая, этот модуль подключается на странице и пробрасывает пользователя на страницу оплаты картой, т.к. сюда $response['formUrl'] . Но! Этот header() по идеи работать не должен, но он работает на локальном сервере и на тестовом сервере проекта, а на бою не срабатывает. Вопрос, header() вообще срабатывает, какая-то мистическая настройка на локальном и тестовом сервере (P.S. специально ничего не настраивали, просто поставили модуль и следуя инструкциям разработчиков расскомментировали это if с header() )?
  • Вопрос задан
  • 67 просмотров
Пригласить эксперта
Ответы на вопрос 1
@vyrkmod
Пишу на php. И не стыдно.
Читать обязательно. Кратко: буфферизация вывода позволяет добавлять хэдеры "вне очереди", поскольку тело ответа не отправляется без команды. Но на проде буффер, очевидно, отключён. Искать "output-buffering" в php.ini.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы