Autor Zpráva
johnl
Profil
Dobrý den, měl bych otázečku.
Testuji RS který jsem programoval, a na hostingu comehere.cz jsem při přihlášení od serveru dostal následující chybu:


Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/www/cekuj.net/subdomeny/frim/test/cls/impor/config/code.php:1) in /home/www/cekuj.net/subdomeny/frim/test/cls/cls_login.php on line 41

Warning: Cannot modify header information - headers already sent by (output started at /home/www/cekuj.net/subdomeny/frim/test/cls/impor/config/code.php:1) in /home/www/cekuj.net/subdomeny/frim/test/cls/cls_login.php on line 43


První chyba session_start() nevím čím je spůsobena ale session se vytvoří, a ta druhá chyba je obyčejný
header("Location: index.php");
zajímavé je že v obou chybách je zmíněn soubor code.php ten obsahuje proměné tohoto typu
$lang['text'] = 'text';
(v souboru je jich více jak 150)
nevýte čím tyto chyby mohou být způsobeny?
WanTo
Profil
Nepoužíváš náhodou kódování utf-8?
johnl
Profil
WanTo:
Nepoužíváš náhodou kódování utf-8?
Používám, vadí to?
AM_
Profil
vadí, to znamená, že máš zřejmě na začátku souborů BOM (3-bytová identifikace UTF8), se kterou si PHP neporadí a posílá ji jako výstup. V textovém editoru, ve kterém stránku píšeš, by mělo být možné BOM vypnout.
WanTo
Profil
johnl
Ne, nevadí. Občas se ale stává, že jsou na začátku utf-8 souboru nějaké bajty tvořící netisknutelné znaky, podle kterých se dá rozpoznat, že je soubor v utf-8. Přidávají to tam tuším nějaké editory, já sám jsem s tím nikdy problém neměl, každopádně když tyhle počáteční bajty zůstanou na začátku PHP souboru, tak se odešlou do prohlížeče a s hlavičkama je amen.

Takže bych si asi zkusil pohrát s nastavením editoru.
johnl
Profil
AM:
V textovém editoru, ve kterém stránku píšeš, by mělo být možné BOM vypnout.
Používám PSpad, nevíš kde se to dá vypnout?
WanTo
Profil
johnl
http://forum.pspad.com/read.php?1,4221,4258
johnl
Profil
Tak jsem zjistil že "IDENT. byty v kodovani UTF-8" mám vypnuté ;-)
A problém přetrvává..
WanTo
Profil
A nemáš na začátku před <?php nějaké prázdné řádky?
johnl
Profil
WanTo:
A nemáš na začátku před <?php nějaké prázdné řádky?
Nemám kód mám takhle:
<?php
session_start();
pokračování kódu 
?>

A před <? žádné znaky ani řádky nejsou...
Joker
Profil
johnl:
A je to v tom souboru code.php?
johnl
Profil
Joker:
Soubor code.php vypadá takto
<?
$lang['text'] = 'text';
$lang['textu'] = 'text';
$lang['texti'] = 'text';
$lang['texts'] = 'text';
?>
Jan Tvrdík
Profil
johnl:
Místo <? používej <?php
Ty informace z PHP jsou celkem jasné – první řádek v souboru code.php odeslal nějaký výstup, pravděpodobně BOM. Začti tím, že vytvoříš zcela nový soubor a do něj obsah souboru code.php překopíruješ a pak ním soubor code.php přepíšeš.
johnl
Profil
Tak jsem to změnil, ale místo toho mi to teď vypisuje chybu
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/www/cekuj.net/subdomeny/frim/test/cls/cls_login.php:5) in /home/www/cekuj.net/subdomeny/frim/test/cls/cls_login.php on line 40
Znamená to že opět soubor cls_login.php odesílá nějaké BOM? Já jsem totiž zkoušel udělat s tím souborem úplně to samé co s tím code.php a nezabralo to...
Jan Tvrdík
Profil
johnl:
Podívej se na 5. řádek v souboru cls_login.php. Na BOM to v tomto případě nevypadá.
johnl
Profil
Na 5 řádku je
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
Jan Tvrdík
Profil
johnl:
Funkci session_start musíš volat před jakýmkoliv výstupem. Ty ji voláš na řádku 40 a výstup máš mnohem dříve.
AM_
Profil
johnl
je docela divné, když první výstup, který posíláš, je meta tag, a ne <!DOCTYPE... nebo <html><head>...
to už tedy nesouvisí s problémem se session, ale spíš to napovídá o zmršené kompozici stránky.
johnl
Profil
AM:
když první výstup, který posíláš, je meta tag, a ne <!DOCTYPE... nebo <html><head>...
Já si nejsem vědom že bych někde posílal nejdřív meta tag, jako první mám určitě doctype.. Můžeš mi říct kde jsi to vyděl?
AM_
Profil
Vzhledem k tomu, že ti to hlásí, že hlavičky byly odeslány v souboru tom a tom na řádce 5, a tam je ten meta tag, tak to znamená, že tam začíná výstup, pokud se nemýlím
johnl
Profil
Takhle začíná kód:
<?php
session_start();
include "impor/config/code.php"; include "impor/data.inc"; ?>
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<head>
  <title>CLS - Login</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" > ...
To znamená že nejdřív (odešlu) nastartuju session pak includuju soubory a pak začíná docpyte a kód pokračuje...
Chamurappi
Profil
Reaguji na AM:
spíš to napovídá o zmršené kompozici stránky
Co je zmršeného na tom, když vynechá zbytečnosti? Moje kódy také občas začínají <meta> elementem a nemyslím si, že tím trpí „kompozice stránky“.


Reaguji na johnla:
Na 5 řádku je
Já bych řekl, že to je na řádku 7.

in /home/www/cekuj.net/subdomeny/frim/test/cls/cls_login.php on line 40
Neznamená to náhodou, že chyba je na řádku 40?
johnl
Profil
Chamurappi:
„Na 5 řádku je“
Já bych řekl, že to je na řádku 7.
Pravda, já to totiž bral jen z HTML (bez php) (což je chyba)

No, teď už mám skoro všechny prolémi vyřešené, avšak poslední který mi zbývá je tato chyba
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/www/cekuj.net/subdomeny/frim/test/cls/index.php:1) in /home/www/cekuj.net/subdomeny/frim/test/cls/index.php on line 2

Na řádku dvě mám
session_start();
nevíte jak tuto chybu opravit?
Jan Tvrdík
Profil
johnl:
Budu se opakovat, ale:
Začti tím, že vytvoříš zcela nový soubor a do něj obsah souboru index.php překopíruješ a pak ním soubor index.php přepíšeš.
johnl
Profil
Děkuji všem za pomoc..

Jan Tvrdík:
Opakování je matka moudrosti ;-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: