Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.66/497: Рейтинг темы: голосов - 497, средняя оценка - 4.66
Почетный модератор
 Аватар для Humanoid
11551 / 4346 / 452
Регистрация: 12.06.2008
Сообщений: 12,452

Что означает предупреждение "headers already sent"

09.08.2011, 11:14. Показов 106264. Ответов 76

Студворк — интернет-сервис помощи студентам
На форуме часто бывают вопросы, что при использовании session_start(), header() и setcookie() и некоторых других функций, появляется сообщения типа
Code
1
2
Warning: session_start(): Cannot send session cookie - headers already sent in D:\HTTP\a.php on line 5
Warning: session_start(): Cannot send session cache limiter - headers already sent in D:\HTTP\a.php on line 5
или
Code
1
Warning: Cannot modify header information - headers already sent in D:\HTTP\a.php on line 5
Это связано с тем, что браузеру уже были отправлены данные перед тем, как была вызвана одна из этих функций.
Если кому интересны подробности, то вот
немного теории
Давайте разберёмся, что происходит, когда мы заходим на сайт. Например, когда мы в браузере открываем страницу http://www.example.ru/file.php, то браузер запрашивает у DNS сервера, какой IP адрес принадлежит серверу www.example.ru. После этого он подключается по протоколу TCP к этому IP адресу на порт 80 (этот порт используется по умолчанию для HTTP) и отправляет текстовый запрос наподобие такого:
Code
1
2
3
4
5
6
7
8
9
GET /file.php HTTP/1.1
Host: www.example.ru
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru,chrome://global/locale/intl.properties;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Cookie: user=2; var=blablabla
Этим запросом в первой строке браузер указывает, что хочет просто получить страницу (GET), указывает адрес страницы и версию протокола (сейчас используются только две версии - 1.0 и 1.1... версия 0.9 устарела и сейчас не используется).
Так же обязательным является параметр Host. Т.к. на каждом сервере может быть несколько разных сайтов, то мы должны указать, к какому именно сайту мы хотим обратиться.
Остальные параметры необязательны... ими браузер просто рассказывает о себе (User-Agent) и рассказывает серверу, как он хочет общаться. Но сейчас речь не об этом...

В ответ на этот запрос веб-сервер запускает выполнение нашего php-скрипта, к которому обращается браузер. И веб-сервер отправляет браузеру результат работы скрипта... но перед этим он отправит свои заголовки ответа.
Code
1
2
3
4
5
6
7
8
9
10
11
HTTP/1.1 200 OK
Date: Tue, 09 Aug 2011 06:59:22 GMT
Server: Apache
X-Powered-By: PHP/5.3.5
Content-Length: 1234
Content-Type: text/html; charset=windows-1251
Set-Cookie: PHPSESSID=3ms50sjl2pt2s19sns5udiryn6; path=/
 
<!DOCTYPE html>
<html>
......
Как вы видите, заголовки идут вначале, а после одной пустой строки начинается тело самого html, который мы генерируем с помощью php-скрипта.

И вот мы подошли к основной сути... когда PHP приказывает веб-серверу начать отправлять само содержимое брузеру, то веб-серверу не остаётся ничего, кроме как отправить вначале все заголовки, которые имеются у него на текущий момент. Поэтому после этого PHP уже не сможет изменить эти заголовки.
Функция header() изменяет любой заголовок. Функция setcookie() добавляет куки к заголовку Set-Cookie, поэтому тоже не может работать после отправки заголовков. session_start() добавляет куки с идентификатором сессии (как в примере выше).


А пока найдём пути решения этой проблемы. Чаще всего такие ситуации происходят из-за использования BOM. BOM - это 2 или 3 невидимых символа в начале файла. Эти символы указывают на то, какая используется кодировка. Многие текстовые редакторы по умолчанию добавляют BOM ко всем файлам юникодовской кодировкой (например UTF-8). Например, создадим в блокноте файл
PHP
1
2
3
<?php
 
?>
И сохраним его в кодировке UTF-8. Но если мы теперь просмотрим файл в кодировке cp1251, то увидим, что вначале файла добавлены символы:
Code
1
2
3
п»ї<?php
 
?>
Именно эти символы и создают проблему. Ведь PHP исполняет свой код только внутри тегов <?php ?>... всё что снаружи отправляется браузеру как есть. Получается, что эти 3 байта сразу же отправятся к браузеру ещё до начала интерпретации PHP-кода. Хотя, по умолчанию в php.ini включен output_buffering и установлен в значение 4096... поэтому проблемы с BOM не должно быть... однако, у многих пользователей она почему-то есть. Подозреваю, что это следствие использования разных кривых сборок.

Я вижу 2 пути решения это проблемы:
1. Включить в php.ini
Code
1
output_buffering = 4096
На вашем компьютере это должно помочь. Но если вы позже закачаете свой сайт на хостинг, то у вас не будет уверенности, что там включен этот буфер.
2. Запретить текстовому редактору сохранять BOM. Но тут уже всё зависит от возможностей текстового редактора, который вы используете. Например, я пользуюсь Notepad++... там можно открыть меню "Кодировки" и выбрать "Преобразовать в UTF-8 без BOM".


Если вы уверены, что BOM не используется, значит где-то перед функциями header(), setcookie() и т.п. вы сами отправляете данные пользователю. Возможно, перед открытием тега <?php есть пустая строка... её тоже нужно убрать.
Если вначале вам необходимо отправлять данные, то можно включить использование буфера, что бы данные не отправлялись сразу браузеру:
PHP
1
2
3
4
5
6
<?php
ob_start();
 
echo "Всякие тексты";
header('Content-Type: text/plain; charset=windows-1251');
?>
В этом случае никаких проблем не будет, т.к. ob_start() указывает, что данные вначале надо накапливать в буфере и отправлять браузеру только когда выполнение скрипта будет завершено.
57
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.08.2011, 11:14
Ответы с готовыми решениями:

Что означает предупреждение " comparison between signed and unsigned integer expressions"
Я написал вот такую строчку: for(int i=0; i &lt; stringas.size();i++){ cout &lt;&lt; &quot; &lt;&lt; &quot;] &quot;; } cout &lt;&lt; endl; И мне пишет:...

Выходит предупреждение headers already sent by
Выходит предупреждение headers already sent by Warning: Cannot modify header information - headers already sent by (output started at...

Событие A означает, что извлечены 3 зеленых, а событие В - извлечены 3 красных леденца. Что означает сумма А или B?
Помогите с задачей! В упаковке 6 леденцов, из них 3 зеленых и 3 красных. Наудачу извлекают 3 леденца. Пусть событие A означает, что...

76
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
04.04.2014, 16:53
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от pav1uxa Посмотреть сообщение
А почему у меня таких ошибок не выводится?

Создал простой скрипт:
PHP
1
2
3
4
5
6
7
8
Hello 
<?php 
setcookie("Hello", "world");
header("Hello: world!");
session_start();
$_SESSION['Hello'] = "world!";
echo $_SESSION['Hello'];
?>
...
Соответственно никаких ошибок скрипт не выводит (в php.ini включен вывод всех ошибок).
Потому что у Вас включен output_buffering = 4096 ?

Добавлено через 14 минут
Если Вы таким макаром отправите на вывод чуть больше данных — больше, чем значение output_buffering, — то произойде "смыв" (flush()), и Вы точно так же получите сабжевую ошибку.
1
Почетный модератор
 Аватар для Humanoid
11551 / 4346 / 452
Регистрация: 12.06.2008
Сообщений: 12,452
04.04.2014, 20:27  [ТС]
Цитата Сообщение от pav1uxa Посмотреть сообщение
А почему у меня таких ошибок не выводится?
Скорее всего, буфер в настройках включен.

(извиняюсь, не заметил ответа на следующей странице)
0
2 / 2 / 3
Регистрация: 28.01.2014
Сообщений: 76
15.04.2014, 18:55
У меня тоже возникали подобные ошибки и не скрываю по моей вине!Заголовки надо отправлять в первую очередь на самом верху скрипта а я когда отправлял заголовки в середине скрипта то возникала ошибка!Немножко погуглив я нашел ответ и теперь эту ошибку не встречаю
0
0 / 0 / 0
Регистрация: 16.01.2015
Сообщений: 1
17.01.2015, 11:52
Здраствуйте.
Возникла следуйщая проблема. Есть у меня код (честно притыренный и переработанный под свои нужды). Сам по себе он работает нормально, хотя и не хочет отсылать письма с мейл.ру. Но мне необходимо вставить его в сайт на основе вордпресс и тут начинаются вышеописанные проблемы. Я пытаюсь вставить его как "страницу". Для возможности подключать php вставил в functions.php используемой темы следуйщий код:
Кликните здесь для просмотра всего текста
function exec_php($matches){
eval('ob_start();'.$matches[1].'$inline_execute_output=ob_get_contents ();ob_end_clean();');
return $inline_execute_output;
}
function inline_php($content){
$content = preg_replace_callback('/\[exec\]((.|\n)*?)\[\/exec\]/', 'exec_php', $content);
$content = preg_replace('/\[exec off\]((.|\n)*?)\[\/exec\]/', '$1', $content);
return $content;
}
add_filter('the_content', 'inline_php', 0);


Ошибки выбивает следуйщие:
Кликните здесь для просмотра всего текста
Warning: session_start() [function.session-start]: Cannot send session cookie — headers already sent by (output started at W:\domains\wp-vodokanal\wp-content\themes\twentytwelve\header.php:1 3) in W:\domains\wp-vodokanal\wp-content\themes\twentytwelve\functions.ph p(512) : eval()’d code on line 2

Warning: session_start() [function.session-start]: Cannot send session cache limiter — headers already sent (output started at W:\domains\wp-vodokanal\wp-content\themes\twentytwelve\header.php:1 3) in W:\domains\wp-vodokanal\wp-content\themes\twentytwelve\functions.ph p(512) : eval()’d code on line 2


Насколько я понимаю, вставлять сессию в "страницу" - в корне неправильно, так как перед ней идет файл headers.php. Если вставляю сессию и связанный с ней код в начало файла хедерс, все работает но "криво" - после отправки данных, меня переадресовывает на главную страницу, а когда перехожу обратно на нужную, там есть сообщения об отправке/ошибке.
Понимаю, что делаю видимо неправильно, но в упор не знаю как грамотно впихнуть код в вордпресс.
Зараннее благодарен.
0
6 / 6 / 5
Регистрация: 29.01.2015
Сообщений: 467
05.02.2015, 14:02
Сегодня писал на mvc php авторизацию и получил такую ошибку, причём ругался на index.php:1. Я не заметил, прочесал весь контроллёр, вид, всю модель, потом заметил эту строку, зашел в файл, вроде не чего перед
PHP
1
<?php
не пишется, оказывается кодировка не та стояла)
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<?php
class Model_Main extends Model {
    
  public function __construct() {
    include 'application/lib/message.php';
    include 'application/lib/security.php';
    include 'application/lib/log.php';
    $this->domain = $_SERVER['HTTP_HOST'];
    $this->security = new Security;
    $this->message = new Message;
   $this->log = new Log;
    $this->db = new PDO('mysql:host=localhost;dbname=user', 'root', '');  
  } 
  
  public function get_data() {}
  
  private function getUserRow($email){
    $stmt = $this->db->prepare("SELECT * FROM `users` WHERE `email` = :email");
    $stmt->bindParam('email', $email);
    $stmt->execute();
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
    return $row;
  }
  
  public function auth(){
    $email = $_POST['email'];
    $password = $_POST['password'];
    $info_user = self::getUserRow($email);
    try{
      if($info_user['sault'] == ''){
     //  $this->message->getLang('incorrect_email_or_passw');
      } else {
        $token_auth = $this->security->genAuthToken($info_user['hash']); 
        $password = md5($password.$info_user['sault']);
        $stmt = $this->db->prepare("SELECT * FROM `users` WHERE `email` = :email AND `password` = :password");
        $stmt->bindParam('email', $email);
        $stmt->bindParam('password', $password);
        $stmt->execute();
        $row = $stmt->fetch(PDO::FETCH_ASSOC);  
        if ($row['id'] == '') {
        //  echo($this->message->getLang('incorrect_email_or_passw'));  
        } else {
          $sql = "UPDATE `users` SET `token_auth` = :token_auth WHERE `hash` = :hash;";
          $stmt = $this->db->prepare($sql); 
          $stmt->bindParam(':token_auth', $token_auth);
          $stmt->bindParam(':hash', $row['hash']);
          $stmt->execute();     
          setcookie('sault', $row['sault'], time()+3600, '/', $this->domain);//1 hour
          setcookie('hash', $row['hash'], time()+3600, '/', $this->domain);
        //  header('Location: /profile.php');
        }
      }  
    } catch (PDOException $e) {
      $this->log->recordLog('Auth error(try, catch) - '.__FILE__.':'.__LINE__);
  //    echo $this->message->getLang('error_auth_db', 'ru'); // error_reg_db echo 'Error #1. Please check back later.';
      exit;
    }
 
  }
  
  private function getUserLang(){
    $arr = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
    $lang = substr($arr, 0, 2);
    if(!$lang) {
      $lang = 'ru';
    }
    return $lang;
  }
  
  private function reg(){
    $user = array();
    $user['name'] = $_POST['name']; 
    $user['lastname'] = $_POST['lastname']; 
    $user['email'] = $_POST['email'];   
    $user['password'] = $_POST['password']; 
    $user['ip'] =  $_SERVER['REMOTE_ADDR'] ? $_SERVER['REMOTE_ADDR'] : $_SERVER['HTTP_X_FORWARDED_FOR'];//$_POST['lastname']
    $user['hash'] = $this->securiy->createHash($user['password']);                                                                                                      ;
    $user['lang'] = self::getUserLang();
    $date = date('Y-m-d');
    $user['sault'] = rand(0, 90000);
    $user['password'] = md5($user['password'].$user['sault']);      
    $token_auth = $this->security->genAuthToken($user['hash']);
    if(preg_match('/^[a-zа-я]{0,255}$/usi', $user['name'])) {//'/[^a-zа-я]+/si'
      if(preg_match('/^[a-zа-я]{0,255}$/usi', $user['lastname'])) {
        if(filter_var($user['email'], FILTER_VALIDATE_EMAIL)) {
          if(preg_match('/^[a-zа-я0-9-=+.,@#]/i', $user['password'])) {
            try {
              $sql = $this->db->prepare("INSERT INTO `users`(`id`, `name`, `lastname`, `email`, `phone`, `ip`, `hash`, `token_auth`, `lang`, `date_reg`, `date_birth`, `sault`, `password`)
                                         VALUES('', :name, :lastname, :email, '', :ip, :hash, :token_auth, :lang, :date_reg, '', :sault, :passw)");             
              $sql->execute(array(':name' => $user['name'], 
                                  ':lastname' => $user['lastname'],
                                  ':email' => $user['email'],
                                  ':ip' => $user['ip'],
                                  ':hash' => $user['hash'],
                                  ':token_auth' => $token_auth,
                                  ':lang' => $user['lang'],
                                  ':date_reg' => $date,
                                  ':sault' => $user['sault'],
                                  ':passw' => $user['password']));
              if($sql) {
                setcookie('hash', $user['hash'], time()+3600, '/', $this->domain);// Время жизни: 1 час 
                setcookie('token', $token_auth, time()+3600, '/', $this->domain);// Время жизни: 1 час 
                //echo '<script type="text/javascript">window.top.location="profile.php"</script>';
              } else {
                throw new PDOException('PDOException');
              }
            } catch (PDOException $e) {
              $this->log->recordLog('Error #1. Registration error - '.__FILE__.':'.__LINE__);
           //   echo $this->message->getLang('error_reg_db', 'ru'); // error_reg_db echo 'Error #1. Please check back later.';
              exit;
            }
          }
        }
      }
    }
  }
 
}
 
?>
0
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 1
10.02.2015, 21:08
Огромное спасибо, отредактировала файл configuration.php и всё заработало. Извините, не нашла кнопки спасибо, поэтому пишу в сообщении.
0
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
29.11.2015, 21:22
Я добавлю от себя не много... Т.к людям пишешь , даешь эту ссылку а они всё равно не понимаю что нужно предпринять для того что бы ошибки не было. Я в одной тебе человеку объяснил наглядно и он понял. То ли лень им тут читать... не знаю.

... Это пустое место.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!DOCTYPE html>
<html lang="rus">
<head>
    <meta charset="UTF-8"/>
    <title>First PHP-page</title>
</head>
<body>
 
<?php
header('Content-Type: text/html; charset=utf-8');
$name = "Nikolai";
$age = 25;
 
echo "$name";
echo "<br>car<br>";
echo "my friends name is $name his age is $age";
 
$n = 10;
 
$c = $age + $n;
 
echo "<br>alexandr thought 10 yaers will have $c";
 
 
?>
 
    
</body>
</html>
Ошибка : "Warning: Cannot modify header information - headers already sent by (output started at T:\home\localhost\www\php\index.php:9) in T:\home\localhost\www\php\index.php on line 10
"
Вы спросите , что же в нём не так?
вот это ↓ должно находится в начале файла.
PHP
1
2
3
4
<?php
header('Content-Type: text/html; charset=utf-8');
//дальше уже можете писать вывод [B]echo,print_r[/B] и т.п код...
?>
В этой ситуации уже будет ошибка:
PHP
1
2
3
4
5
<?php
..........
header('Content-Type: text/html; charset=utf-8');
//Догодатся не трудно почему я думаю...
?>
Еще вопрос? А будет ли вот здесь ошибка ?
PHP
1
2
3
4
 
...<?php
header('Content-Type: text/html; charset=utf-8');
?>
Ответ: ДА. Потому что ... это у нас пробел да перед header,session_start,setcookie не должно быть пробелов ентеров и т.п.
1
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
31.01.2016, 14:03
Цитата Сообщение от Azdeman Посмотреть сообщение
В этой ситуации уже будет ошибка:
PHP
1
2
3
4
5
<?php
..........
header('Content-Type: text/html; charset=utf-8');
//Догодатся не трудно почему я думаю...
?>
Где ???
1
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
31.01.2016, 15:58
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Где ???
Да не дописал.
PHP
1
2
3
4
5
<?php
echo ' ';
header('Content-Type: text/html; charset=utf-8');
//Догодатся не трудно почему я думаю...        
?>
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
28.02.2016, 20:33
Цитата Сообщение от megahertz Посмотреть сообщение
PHP/HTML
1
2
3
4
5
6
7
8
9
<html>
<head>
<title>test</title>
<meta http-equiv="Refresh" content="<?=$delay?>" />
</head>
<body>
<?php
header("Content-Type: text/html; charset=utf-8");
?>
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
Первое, что хотелось бы узнать: почему это работает и работает ли вообще?
Цитата Сообщение от megahertz Посмотреть сообщение
грубая опечатка, убрал, тем не менее и с ней и без нее работает
Итак, вопрос: или я глупый, или что-то все же здесь не так.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
28.02.2016, 23:42
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
что-то все же здесь не так.
Не так - это header после вывода?
Ну может output buffering включен, тогда будет работать.
1
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
19.05.2016, 00:10
Было бы неплохо, если тема содержит "headers already sent", чтобы 1 ответом автоматически добавлялась ссылка на эту тему
1
0 / 0 / 0
Регистрация: 15.02.2018
Сообщений: 19
18.02.2018, 22:14
ты пытаешься что-то выдать, явно или не явно, а потом вызываешь функцию header. но заголовки могут отсылаться только до текста документа
0
0 / 0 / 0
Регистрация: 09.09.2018
Сообщений: 9
09.09.2018, 18:18
Здравствуйте. Видимо вечно буду ждать, когда придет активация на email и напишу тут. Да простят меня создатели темы.

Написал свою CMS на PHP 7 + MySQL и столкнулся с такой проблемой, что на некоторых хостингах, в частности на базе UBUNTU, не всегда срабатывает инструкция header('Location: ') или set_cookie после любой инструкции print в шаблонах.

Что характерно, так это то что на сервере на базе lua с PHP 7 header работает исправно даже после print в шаблон.

Но меня интересует добиться совместимости и с остальными хостингами и поэтому я хочу переписать на Output Buffering Control с использованием ob_start(). Дело в том, что я не нашел в PHP поддержку DOCTYPE HTML 5 с нужными мне namespace и не знаю есть ли способ это испаравить?

Подскажите, как вывести с помощью Output Buffering Control разметку страницы на основе HTML 5 со всей microdata и JSON\LD?

Вот код для проверки: http://cyberx.pro/revolver-cms-v.1.3.2/

Еще была странная ситуация что на LUA + Linux не работала инструкция header после вывода sidebar. Я долго ковырялся и нашел ошибку какого то непонятного происхождения после вывода одного из комментариев из базы данных. Print оставлся, а код я закоментирновал и header заработал прекрасно. Я сделал вывод что это ошибка самого PHP или какой-то его характерной сборки(может компилятор Linux глючнул). Естественно вывод до этого тоже присутствовал - это была doctype и head страницы, но ошибка была именно из-за вывода sidebar через print.

Мне уже писали, что-то вроде того, что так быть не может и после первого же принт не работает header, хотя я доказал, что дело не в этом. Поэтому не пишите пожалуйста, что так не делается.

Вообще можно ли как-то избежать использования OB для того, чтобы оставить header инструкцию рабочей на всех вариантах серверов PHP и Linux(у меня прекрасно работает на Mac OS и на Linux + LUA server)? Может дело в какой-то системной настройке?

p.s.: просьба лузеров-профи с форума php.ru, считающих PHP святым граалем работающим везде стабильно и без ошибок пройти сию тему мимо.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
09.09.2018, 19:33
Цитата Сообщение от CyberX346 Посмотреть сообщение
не всегда срабатывает инструкция header('Location: ') или set_cookie после любой инструкции print в шаблонах.
Все правильно, и не должно работать
Цитата Сообщение от CyberX346 Посмотреть сообщение
на сервере на базе lua с PHP 7
ЩИТО? lua - это язык программирования.

Цитата Сообщение от CyberX346 Посмотреть сообщение
Подскажите, как вывести с помощью Output Buffering Control разметку страницы на основе HTML 5 со всей microdata и JSON\LD?
Не надо ерундой заниматься, output buffering не для этого придуман. Сперва должен идти вывод заголовков, и только потом тела.
0
0 / 0 / 0
Регистрация: 09.09.2018
Сообщений: 9
09.09.2018, 19:45
А это задокументировано оффициально? Почему тогда на MAMP без разницы как выставлять заголовки. До или после - оно просто оаботает отлично. Почему обвязка LAMP на LuA под Cent os тоже работает как угодно, а PHP на Ubuntu имеет такую ошибку? Кто то конкретно ответить может почему не весь вывод, а конкретно выбросы из БД ломают инструкции header. Только прошу без дилетантства потому что у большинства несведущих в качестве экономных шустриков и программистов в кавычках ubuntu и они считают что так и должно быть. Я собираю максимум данных и ситуаций чтобы написать об ошибке.

У меня архитектура такая. И я не собираюсь ее менять из-за прихоти какой то случайности. Так как использовать буфер для формирования корректной html 5 страницы оставив одну переменную с телом кода html? Дело в том что так проще всего довести до совмесьимости... буквально три четыре вставки в код и готово.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
09.09.2018, 19:54
Цитата Сообщение от CyberX346 Посмотреть сообщение
А это задокументировано оффициально?
Изучай протокол http
Цитата Сообщение от CyberX346 Посмотреть сообщение
Почему тогда на MAMP без разницы как выставлять заголовки. До или после - оно просто оаботает отлично. Почему обвязка LAMP на LuA под Cent os тоже работает как угодно, а PHP на Ubuntu имеет такую ошибку?
Может по-умолчанию быть включенной директива output buffering. Но это не значит что так надо решать проблему. Output buffering задает количество байт, после которых нужно начинать отправку тела ответа. Если в какой-либо момент станет отправляться хоть на 1 байт больше, то тело опять станет отправляться раньше заголовков.
И опять же какой смысл в делать вывод данных вместе с редиректом? Лишний трафик уйдет, но никакой ценности он не предоставляет. При большом числе пользователей это может стать проблемой.

Цитата Сообщение от CyberX346 Посмотреть сообщение
У меня архитектура такая
Значит архитектура не очень. Всегда можно сначала обработать данные, понять нужен ли редирект, и только к самый последний момент заняться формированием тела ответа.
1
0 / 0 / 0
Регистрация: 09.09.2018
Сообщений: 9
09.09.2018, 20:10
Вот. Спасибо. Конкретика. Буду тестировать этот буфер чтобы докопаться до сути.

Идет например проверка авторизации. Имя и пароль верны, ставим куки и редиректим на морду. У меня вот так header используется. Не вижу особой проблемы в архитектуре если честно. Как бы я еще этот редирект сделал. У меня один рабочий рут на контроллере это index.php. все остальное заблокировано и на текущем хостинге великолепно раблтает все включая свой самописный модуль форума.
0
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
09.09.2018, 20:19
Цитата Сообщение от CyberX346 Посмотреть сообщение
Идет например проверка авторизации. Имя и пароль верны, ставим куки и редиректим на морду.
Ну, правильно, только аутентификации. Зачем до этого делать echo?

Вам Jewbacabra все по полочкам разложил.
1
0 / 0 / 0
Регистрация: 09.09.2018
Сообщений: 9
09.09.2018, 20:24
Видимо есть и другой путь. Я писал всю систему чистого времени четыре месяца. чего то мог не предусмотреть. В любом случае, если проблема решаема счетчиком байт до вывода заголовка и это можно сделать с помощью ини. Я так и поступлю. Не считаю это преступлением как таковым. Скорее непредусмотренностью самого php.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.09.2018, 20:24
Помогаю со студенческими работами здесь

Постоянные ошибки с сессиями (headers already sent и Cannot modify headers)
Добрый день, хоть тема я так понял и избитая но всё же не могу понять логику работы сессий. Вот у меня есть админ панель из десятка файлов....

Что означает появление письменности (языка), и что означает реформа письменности (языка)?
Не секрет, что духовность всегда сокрыта в письменности (языке), так высшая стадия развития духовности социума (общества) это всегда...

Что означает, что определение метода находится внутри определения класса?
Что означает, что определение метода находится внутри определения класса? Prostokat p0(&quot;Prostokat&quot;,2,3); cout &lt;&lt;...

Поясните пожалуйста что означает двоеточие и то что идет после него
В 4 строчке после параметра в скобочках нету &quot;;&quot; или же тела функции, что не сходится с моим шаблоном в голове. Поясните пожалуйста что...

Что такое dy1 и dy2 в программе, и зачем мы их перемножаем. Что означает строчка x=x1
Что такое dy1 и dy2 . и зачем мы их перемножаем? и что значит строчка x=x1 clear all; close all; clc; disp('Определение кол-ва...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru