Autor Zpráva
Pietro
Profil
Zdravím!
Řešil jsem teď jeden zajímavý problém, a chtěl bych se zeptat, jestli někdo ví proč:

Mám skript, který volá Header. Když ho spouštím na serveru u sebe na počítači, tak je všechno v pohodě. Nahrál jsem to ale na webserver, a hle, hlásil Warning: Cannot modify header information. Tak jsem zkusil funkce OB_Start() a OB_Clean();. K mému překvapení teď jede vše jak má. Ale co je na tom zajímavé, dal jsem je na první řádek. Tzn. skript začíná takhle:
<?
OB_Start();
OB_Clean();
// stránka vyhledávání


Nechápe někdo? Rád bych věděl proč toto vyřešilo problém? Podle mne ale vůbec k Warningu nemělo dojít, žádné znaky, ba ani prázdné před výpisem není. Bude to asi konfigurací serveru?!
Bill
Profil
Pokud tomu dobře rozumím, tak problém bude v tom, že tam máš nějaký whitespace znak ... na začátku před <? nebo za ?> takže jakokdyby omylem něco vypisujeě... pokud ti to u sebe funguje v poho a na serveru nejede může to být pravě tím že na linuxu je windowsácké ukončování řádku (\r\n) bráno jako chybný znak
Nox
Profil
Nebo jestli to nemůže být http://diskuse.jakpsatweb.cz/index.php?action=vthread&topic=67508&foru m=9&page=-1 ....moc to neznám,
jen že mi to přijde podobné

jinak lepší je psát <?php než <?, kratší varianta nemusí být vždy podporována
Pietro
Profil
Whitespace tam žádný nevidím, možná to bude právě tím \r\n. Jenomže proč tedy stačí zapnout a následně vyčistit OB a jede vše OK?

Ad <? - jsem tak zvyklý, když by nebyla podporována (s čímž jsem se ještě nesetkal), nikdy není problém nahradit <? za <?php strojově. Ale o tom tahle diskuse není.
Bill
Profil
Pietro
<? je deparacted nebo jak se to píše :-)

ohledně toho \r\n v jakém editoru to edituješ, btw jaké máš kodovani, doporučuji nějaký editor kde můžeš nastavit jaký má byt styl konce řádku tzn na linuxovské \n a kodovani na utf-8
a potom promazat vrch a spodek i když nic nevidíš (Backspace a DELETE)
Pietro
Profil
Depre co? :D

Používám PSPad, UTF-8, DOS; Vrch i spodek promazan. Stale je mi to zahadou
srigi
Profil
Mozno mas biely znak niekde v includovanych knizniciach.
joe
Profil
Pietro
A víš vůbec k čemu ob_start() je?
Pietro
Profil
joe Manuál píše
„This function will turn output buffering on. While output buffering is active no output is sent from the script (other than headers), instead the output is stored in an internal buffer. “
Tak předpokládám, že když zavolám OB_Start(), tak se od tohoto volání výstup neposílá ze serveru klientovi, ale zůstává v zásobníku. Dokud nezavolám další funkci. A fukce OB_Clean() mi zase zásobník vymaže bez odeslání dat klientovi. Nebo to snad chápu špatně?

V mém případě tedy inicializuji buffer a následně ho vymažu (ale je prázdný). TAK PROČ TO ŘEŠÍ MŮJ PROBLÉM? To je to co nechápu.
joe
Profil
Pietro
Ano, tak nějak, jenže ob_clean() jen vymaže obsah bufferu, ale ukládání do bufferu stále pokračuje.

To znamená, když napíšeš na začátek

ob_start();
ob_clean();

Tak je to stejné jako když napíšeš jen

ob_start();

Pro vypsání bufferu slouží ob_flush() a když napíšeš na začátek

ob_start();
ob_flush();

K mému překvapení teď jede vše jak má...
Jasně, že to funguje, protože se to ukládá do bufferu...

A proč to nefunguje bez toho, máš tam asi nějaký znak, který tomu vadí.
Pietro
Profil
Ja tak! Tak to jsem nevěděl. Díky za poučení. Jdu hledat ten neviditelnej znak. Diky za pomoc
Toto téma je uzamčeno. Odpověď nelze zaslat.