Буфер вывода не работает с использованием метатегов - PullRequest
0 голосов
/ 30 апреля 2020

Я всегда использовал php_flag output_buffering On, чтобы я мог header("Location: ...") через несколько html.

Теперь, когда я добавил favicons , apple-touch -icons и og / twitter Я получаю эту ошибку:

Uncaught ErrorException: Cannot modify header information - headers already sent by (output started at *file name 1*_*row* in *file name 2*:*row*
Stack trace:
#0 [internal function]: {closure}(2, 'Cannot modify h...', '*file name 1*', *row*, Array)
#1 *file name 2*(*row*): header('Location: ./log...')
#2 {main}
thrown in <b>*file name 2*</b> on line <b>*row*</b><br />

Какую ошибку я получаю при попытке отправить заголовок типа повара ie (в этот случай header("Location: ...")) после того, как что-то уже было отправлено.

Это казалось странным, поэтому я провел несколько тестов. Я обнаружил, что некоторые метатеги вызывают эту ошибку, даже если для php_flag output_buffering установлено значение `Вкл.

<link rel="manifest">
<link rel="apple-touch-icon">
<link rel="icon">
<link rel="shortcut icon">
<link rel="mask-icon">

<meta itemprop="name" property="og:title" name="twitter:title">
<meta itemprop="description" property="og:description" name="twitter:description">
<meta itemprop="image" property="og:image" name="twitter:image">
<meta property="og:url" name="twitter:url">

<meta property="og:site_name">
<meta property="og:type">
<meta property="og:image:width">
<meta property="og:image:height">
<meta property="og:image:type">
<meta property="og:locale">

Если один из этих тегов (одного достаточно) присутствует внутри , php_flag output_buffering перестает работать.

Но это не то же самое с любыми другими тегами, такими как <meta property="og:see_also"> или <meta name="thumbnail">. Я могу оставить их, и все работает правильно.

Что не так с этими тегами? Я, очевидно, не могу удалить их все.

Мой сервер работает на сервере Linux, с модулями PHP 7.3 и Apache. Спросите меня для дополнительной информации

...