Autor Zpráva
Jardaklon
Profil *
Hezký den,
vytvořil jsem stránky tím způsobem že do hlavní šablony importuji všechny ostatní sajty. Web mám rozdělený na veřejnou a neveřejnou část.
Ty neveřejné importované scripty chráním tak že do nich includuji soubor zabezpeceni.php, který má následující obsah:

<?php 
if(!isset( $_SESSION )) 
{ 
session_start (); 
} 
if ($_SESSION['prihlasen']<>"ano")
{
    header("location:index.php?akce=3");
    die();
}
include "konfigurace.php";
$dotaz = mysql_query("select * from uzivatele where id = '".$_SESSION['id']."'");
$overeni = mysql_num_rows($dotaz);
$row = mysql_fetch_array($dotaz);
?>

Problém je, že to header mi nechce fungovat. Chápu že před ním nesmí být textový výstup, tak za to asi může to že jsou ty stránky importované do šablony (ve které se zobrazují) a tam před tím asi nějaký výstup bude. 


Je ale nějaké řešení jak to obejít (tím nemyslím předělání celého webu)? Jde mi hlavně o funkčnost, vím že jsem začátečník a nemám vysoké nároky ;o).
DarkMeni
Profil
Jestli je před headerem teda nějakej výstup, tak ho můžeš ukládat do vyrovnávací paměti, a vypsat ho až po odeslání všech nutných headerů.

<?php
ob_start();
//skript šablony...
//definice funkcí nebo metod ve třídě, includování jiných souborů...
include('zabezbeceni.php');
$output_buffering_content = ob_get_contents();
ob_end_clean();
echo $output_buffering_content;
/*
Možná by i fungovalo místo těch tří řádků přek komentářem i něco jako
echo ob_get_flush();
Ale nevim
*/
//pokračování skriptu...
?
>
Jardaklon
Profil *
Takže jestli jsem to dobře pochopil, musím zasáhnout do scriptu šablony?

Ošetřit to pouze v tom souboru zabezpeceni.php tedy nejde?
DarkMeni
Profil
Teoreticky by možná šlo poslat html s přesměrováním, ale to ho nepřesměruje (jako to umí header) hned, ale až po načtení toho souboru, takže asi tak 0,5 - 3 vteřiny bude vidět buď prázdno nebo to co mu napíšeš.
die('<!DOCTYPE html><html><head><meta http-equiv="refresh" content="1;url=index.php?akce=3"></head><body></body></html>');
Ale jestli ti to už před použitím headeru něco pošle jako výstup, tak ten header pak nic neudělá, a někdy myslim že i vyhodí chybu. Tomu se dá předejít vyrovnávací pamětí, ta si pamatuje co má poslat, a pošle to až když ty to budeš potřebovat. A dá se i nějak nastavit automatický spouštění, ale kvůli 1 headeru?
Jardaklon
Profil *
DarkMeni:
No právě. U ostatních scriptů to mám nastavené tak, že se formulář pošle na čistou (nevnořenou) adresu souboru, header mi pak vrátí hlášku po provedení scriptu už do integrovaného souboru (např. form pošlu na registrace.php a header v registrace.php mě vrátí na index?page=...atd.). To funguje. Ale s tímhle si rady nevím.

Vyzkouším tu radu s tím přesměrováním v html. Hlavně jde o to, aby když se to odhlásí (po vypršení času nebo při neoprávněném otevření stránky) nevyhodilo paskvilní zobrazení stránky nebo chybu.

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: