Warning

14 отговора 305 прегледа
#1

Warning

Warning: Cannot send session cache limiter - headers already sent (output started at c:\apache\htdocs\page.php:2) in c:\apache\htdocs\page.php on line 163

Значи юзъра се логва в една форма и след проверката на парола, ако е вярна се изпълнява:


<?php
session_start();
$_SESSION['user'] = "$user"; // $user е информацията от формата
?>

по-надолу има линк към друга страница:


<?php
echo '<a href="page.php?' . SID . '">page 2</a>';
?>


като на страница page.php трябва да се изпише това което пази сесията


<?php
session_start();
echo $_SESSION['user'];
?>


Само дето дава грешката, която съм написал най-горе и след това изписва каквото трябва.
На какво се дължи - какво съм оплескал?
Благодаря Ви много!

Отговор
в отговор на bobo #2

Re: Warning

Забравих да кажа, кой е 163-ти ред


162. <?php
163. session_start();
164. echo $_SESSION['user'];
165. ?>

Отговор
в отговор на bobo #3

Re: Warning

Хедърът за сесията трябва да бъде първи. Ако към клиента се изпрати дори един байт преди session_start() дава такава грешка.
Провери дали в редовете от 1 до 161 не става нещо такова - може да е интервал, нов ред или друг символ(и).

Успех

И най-ярките личности си плащат тока.
Отговор
в отговор на edembg #4

Re: Warning

Много коварна грешка:
----------------------------------------

<?php

...
?>
------------------------------------------

Един такъв забравен нов ред в началото на файл се изпраща към браузъра и после забрави за хедъри. Ако много проваля логиката това неизпращане - открих, че включването на output buffering помага --> изпратените неща не се пращат веднага и имаш "втори" шанс да си играеш с хедъри преди да са заминали към клиента.

--
"Agile is a mindset, not a set of practices, rules, or tools."
Tom Poppendieck
Отговор
в отговор на Mycлoн #5

Re: Warning

а то че е хубаво хубаво е но не е за предпочитане да го използваш. на твоя компютър можеш да го включиш това но ако решиш да си качваш някъде проекта... поне при фрии сървърите е изключена тази опция...платените хостинги предполагам че можеш да променяш настройките но все пак е препоръчително да не се използва... плюс това в по-старите версии на php мисля че нямаше въобще такава опция... сега пък си е off по подразбиране... изобщо е добре да си направите проекта работещ при настройки по подразбиране...

Отговор
в отговор на Spedge #6

Re: Warning

Доколкото знам разликата след включването на тази опция е само в производителността... и то май малка.

Знам обаче за някои библиотеки, които разчитат на output buffering - phpMVC например. Аз също понякога правя магарии като:

ob_start();
include( ... );
$contents = ob_get_contents();
ob_end_clean();

Бе всичко е "според зависи".

--
"Agile is a mindset, not a set of practices, rules, or tools."
Tom Poppendieck
Отговор
в отговор на Mycлoн #7

Re: Warning

е това последното което писа мисля че трябва да сработи и без output_buffering?!

Отговор
в отговор на Spedge #8

Re: Warning

Опааа явно съм чел документацията през пръсти. Мерси за доуточняването.

--
"Agile is a mindset, not a set of practices, rules, or tools."
Tom Poppendieck
Отговор
в отговор на Spedge #9

Re: Warning

В отговор на:

а то че е хубаво хубаво е но не е за предпочитане да го използваш




е хайде сега ... нещо жестоко се бъркаш ... според тебе защо хората са се мъчили да го пишат и развиват толкова в последно време ...
по твоята логика да си пишем на PHP3 ...

напротив - output_buffering, output_handler, zlib.output_compression и zlib.output_handler опциите заедно със output control функциите са си много полезни в много случаи

това с фрий сървърите, дори да е вярно, което се съмнявам, не е достатъчен довод ...

Отговор
в отговор на AcidMemory #10

Re: Warning

аз си мисля нещо за сигурност... същата рабтоа е с register_globals
много ми се иска да го използвам включено но така се намаля сигурността... ето точно тази опция примерно в по-ранните версии беше включена по подразбиране сега не е...
същатата работа според мен е и с output_buffering

Отговор
в отговор на Spedge #11

Re: Warning

много ми се иска да го използвам включено но така се намаля сигурността

На мене пък не ми се иска изобщо. Проблемите на включения регистър глобалс съвсем не са само в сигурността.
А за аутпут буферинг... с какво точно я намалява?

Отговор
в отговор на Spedge #12

Re: Warning

нещо се бъркаш ... няма никакви притеснения за ouput buffering-а
дори в ini_set е дефиниран и като PHP_INI_PERDIR

Отговор
в отговор на bobo #13

Re: Warning

Много благодаря на всички!

Отговор
в отговор на AcidMemory #14

Re: Warning

много хора ме опровергаха затова което написах така че ще приема че сте прави...
мислих си за пращане на някакви нежелани хедъри с цел пробив които до някаква степен могат да се ограничат с output_buffering

Отговор
в отговор на Spedge #15

Re: Warning

просто виж php.ini-optimized

там има специално описано, че в оптимизираната версия се пуска за производителност
; - output_buffering = 4096 [Performance]


принципно, ставаше въпрос за output control функциите, но пък там няма никакви проблеми ...

Отговор