Autor Zpráva
Question
Profil *
Zdravím. Taká vec. Ku všetkým stránkam sa dostávam cez "index.php?adresar=blabla&subor=blabla" tak, že cez index.php vyriešim hlavičku a menu (proste všetky tie veci ktoré sa opakujú na každej stránke) a potom cez include vložím obsah konkrétneho súboru. Problém ktorý tu chcem načrtnúť je čisto teoretický :-) Ak by niekto za takéhoto stavu napísal do url adresu konkrétneho súboru (napr. http://blabla/adresar/subor.php), tak samozrejme to vypíše riadne blbosti, lebo okrem toho, že v tých súboroch nie sú žiadne tagy <html>, jazyk. kódovanie, štýly, <body>... sú tam aj občas volania niektorých php funkcií (takže vypíše že call to undefined function). Čiže by som potreboval do hlavičky každého súboru vložiť napr. funkciu header. Vymyslel som niečo takéto:

<?php @Header("Location: http://".$_SERVER['HTTP_HOST']."/index.php?url='".$_SERVER['PHP_SELF'] ."'") ?>

(u mňa vypíše potom niečo v zmysle: "http://localhost/index.php?url='/bunka/uvod.php'")

1. aký je rozdiel medzi ['HTTP_HOST'] a ['SERVER_NAME'] ??? lebo s localhostom to fičí rovnako len neviem ako sa to bude správať keď tam bude niečo v zmysle http://question.host.sk/ (--> príklad)
2. a je nutné aby v časti ".php?url='/.../*.php'" boli tie úvodzovky (' ') ??? ak použijem len

<?php @Header("Location: http://".$_SERVER['HTTP_HOST']."/index.php?url=".$_SERVER['PHP_SELF']" ) ?>

tak to vypíše chybu

3. a aj to prvé lomítko "url='/bunka" mi tam tiež vadí, ale to je ten najmenší problém

Takže poraďte už ako to header upraviť tak ako som popísal ale aby to zas nebolo moc dlhé a už vôbec nie aby to bolo na niekoľko riadkov. Prípadne iné riešenie ako cez header ale toto sa mi zdá celkom v pohode. Dík
krteczek
Profil
Já to řeším tak, že na index.php definuji proměnnou:

$abcdef="xgbhDGYSECTwehZYRTK IOTIU,50S3698De6";//prostě těžce uhádnutelný text

a na začátek každé stránky dávám něco takového:

<?php
if((!empty($abcdef)) and ($abcdef=="xgbhDGYSECTwehZYRTK IOTIU,50S3698De6"))
{
//tady vložim obsah stránky
}
else
{
header("location: /");
}
?>

krteczek
Question
Profil *
No ale presne takému niečomu by som sa asi chcel vyhnúť, lebo to vyzerá dosť zložito a neverím že to nejde jednoduchšie.
janex
Profil *
Já používám na začátku
if (!isset($page['id']))
ErrorHandler('403');
...
Pokud nejsou zapnuty register_globals (jako že už snad nikde nejsou), tak v tom nevidím problém.
Leo
Profil
Pokud vam jde jen o to, aby nikdo nemohl primo volat vase castecne skripty, elegantni reseni je dat je do te casti adresarove struktury, kam se dostane vas php skript (aby mohl udelat include) ale uz ne prohlizec pres http. Leo
Question
Profil *
...dat je do te casti adresarove struktury, kam se dostane vas php skript (aby mohl udelat include) ale uz ne prohlizec pres http. Leo

volakde som cital ze na internete sme si vsetci rovni a preto si budeme tykat :) pokial si to myslel ako radu pre viacerych ludi tak povazuj predchadzajucu vetu za bezpredmetnu :) ... takze ako si myslel ten header?? to akoze mam dat tym adresarom nejake crazy mena?? alebo ako??
Leo
Profil
"takze ako si myslel ten header?? to akoze mam dat tym adresarom nejake crazy mena?? alebo ako??"

Zadny header, proste soubor vnitrni.php bude v te casti webserveru, kam se dostane vas PHP skript, ale kam se nedostane prohlizec pres http protokol. Slusnejsi webhosting to ma automaticky - pres ftp se prihlasite do adresare na serveru, kde je teprve jako podadresar root webu. Leo
Question
Profil *
takze mam sa na to pri navrhu stranky vykaslat?? netreba nic do tych "ciastkovych" skriptov pridavat??
Jasper
Profil *
Ja bych mel taky jeden problem s funkci header.

Mam udelanou tuto funkci:
function logout() {

session_destroy();

header("Location: index.php");
};

A na webzdarma mi funguje, ale na IC to nejde a vypise se toto:

Warning: Cannot modify header information - headers already sent by (output started at /disk1/home/ic/e4b-2005/www/index.php:23) in /disk1/home/ic/e4b-2005/www/funkce.php on line 407

ten řádek 407 je prave ten s tou funkci header
Leo
Profil
Chyba headers already sent znamena, ze se pokousite zmenit HTTP hlavicku az pote, co do prohlizece byl poslan vlastni vystup (kus stranky) - nejcasteji jde o to, ze pred volanim session_start, header, nebo setcookie mate nejaky prazdny radek, znak, apod. Leo
Jasper
Profil *
Ale na WZ to funguje bez problemu. Proste jak kliknu na odhlasit, tak se provede tato podminka


elseif($sekce=="logout"):
logout();


A zavola se tato funkce
function logout() {
session_destroy();
header("Location: index.php");
};
Leo
Profil
A kompletni zacatek kodu te stranky by nebyl? Urcite nezacinate elseif, Leo
Jasper
Profil *
Tak to bude asi spatne naprogramovane. Ja nejprve zobrazim hlavicku stranky, menu, hlavicku obsahu a az pak je ta rozhodovaci konstrukce, ktere zavola tu funkci logout. Ale nevim jak to mohlo na wz fungovat...

BTW. neni nejaka jina a spolehliva moznost jak presmerovat tu stranku?
Jasper
Profil *
Jeste dodam ze tu hlavicku menu a tak zobrazuju ne pomoci php ale je to ciste html, jestli to ma nejaky vliv...
krteczek
Profil
na začátek dejte:(první řádek souboru)
<?php ob_start(); ?>

a na konec:(poslední řádek souboru)
<?php ob_end_flush();?>

a mělo by to začít fungovat bez chyb...
krteczek
Toto téma je uzamčeno. Odpověď nelze zaslat.

0