Autor | Zpráva | ||
---|---|---|---|
Dranel Profil |
#1 · Zasláno: 26. 12. 2007, 15:18:10
Zdravím, mám níže uvedenou fci na includování stránek z adresářů dle URL, ale nějak mi to nechce šlapat. Mohl by mi to prosím někdo přeorat? Předem dík...
<?php function ukazstranku() { if ((string)$_GET['str'] <> '') { if ((string)$_GET['rub'] <> '') { $kategorie = $_GET['kat']; $rubrika = $_GET['rub']; if ((string)$_GET['str'] <> '') $stranka = $_GET['str']; else $stranka = "uvod"; if (is_file("$kategorie/$rubrika/$stranka.php")): $nazevstranky = $stranka.".php"; require ("$kategorie/$rubrika/$nazevstranky"); elseif (is_file("$kategorie/$rubrika/$stranka.htm")): $nazevstranky = $stranka.".htm"; require ("$kategorie/$rubrika/$nazevstranky"); elseif (is_file("$kategorie/$rubrika/$stranka.html")): $nazevstranky = $stranka.".html"; require ("$kategorie/$rubrika/$nazevstranky"); else: $nazevstranky = $stranka.".htm"; require ("notfound.php"); endif; } elseif ((string)$_GET['rub'] == '') { $kategorie = $_GET['kat']; if ((string)$_GET['str'] <> '') $stranka = $_GET['str']; else $stranka = "uvod"; if (is_file("$kategorie/$stranka.php")): $nazevstranky = $stranka.".php"; require ("$kategorie/$nazevstranky"); elseif (is_file("$kategorie/$stranka.htm")): $nazevstranky = $stranka.".htm"; require ("$kategorie/$nazevstranky"); elseif (is_file("$kategorie/$stranka.html")): $nazevstranky = $stranka.".html"; require ("$kategorie/$nazevstranky"); else: $nazevstranky = $stranka.".htm"; require ("notfound.php"); endif; } } else { $stranka = "uvod"; if (is_file("uvodnik/$stranka.php")): $nazevstranky = $stranka.".php"; require ("uvodnik/$nazevstranky"); elseif (is_file("uvodnik/".$stranka.".htm")): $nazevstranky = $stranka.".htm"; require ("uvodnik/$nazevstranky"); elseif (is_file("uvodnik/".$stranka.".html")): $nazevstranky = $stranka.".html"; require ("uvodnik/$nazevstranky"); else: $nazevstranky = $stranka.".htm"; require ("notfound.php"); endif; } } ?> |
||
djlj Profil |
#2 · Zasláno: 26. 12. 2007, 15:28:44
ale nějak mi to nechce šlapat
Že by rozbitá šlapátka? Já mám Authory za 400 a jsou fakt výborný, jen dělají díry na podrážce bot. A teď vážně: zkus blíže popsat, co ti nešlape. Nejsem si jistý, zda se někomu bude chtít s tím babrat. |
||
Mastodont Profil |
#3 · Zasláno: 26. 12. 2007, 15:32:46
No jak se na to dívám, nebylo by lepší namísto kombinace is_file + require prostě použít readfile nebo file_get_contents?
|
||
Dranel Profil |
#4 · Zasláno: 26. 12. 2007, 15:38:19
djlj
www.demo8.cz - koukni se sám - skus si proklikat pár položek v menu... Mastodont S tím nemám tolik zkušeností... bere to i PHP scripty? Mohl bys mi to přiblížit? |
||
Dranel Profil |
#5 · Zasláno: 26. 12. 2007, 15:42:51
Aha - už jsem na to přišel - nejede to na localhostu (píchnul jsem). Kříží se to totiž s modem_rewrite...
Tím pádem bych vás chtěl požádat o to, jestli ten script nejde nějak zjednodušit/zrychlit/zabezpečit |
||
Mastodont Profil |
#6 · Zasláno: 26. 12. 2007, 15:50:28
Dranel
No, mně především naprosto uniká, proč máš v těch adresářích míchanici PHP a HTML souborů ... buď mám statický web dělaný z HTML souborů a staticky to linkuju, nebo mám dynamický web s články v databázi, které tahám přes nějaký SELECT podle GET parametrů. Ty nejdřív testuješ, jestli existuje něco.php, když ne, tak testuješ něco.htm a nakonec něco.html. To musíš mít v těch složkách hrozný hokej, ne? |
||
Akacko Profil |
#7 · Zasláno: 26. 12. 2007, 18:38:00
Pokud si ještě dobře pamatuji tak takhle podobně do dělali na linuxsoft.cz v seriálu php, akorát to bylo 4x kratší.
|
||
Dranel Profil |
#8 · Zasláno: 27. 12. 2007, 00:04:17
Akacko
Ano, základ je z linuxsoftu... ale mě základ nestačil tak jsem si to obohatil. Mastodont Mám v plánu to změnit na DB, ale tohle potřebuju pro střední weby, kde DB nebude. Btw v složkách mám jen php, asi máš pravdu že to htm a html od sebe vyházím, ale tohle si připravuju scripty který budu prodávat - a to musí bejt univerzální. Jde to tedy prosím nějak zjednodušit/zrychlit/zabezpečit? |
||
tiso Profil |
#9 · Zasláno: 27. 12. 2007, 00:37:20
Dranel - ide.
|
||
Dranel Profil |
#10 · Zasláno: 27. 12. 2007, 00:50:39
tiso
Heh dík no :-) PS: Nechceš prozradit jak? |
||
tiso Profil |
#11 · Zasláno: 27. 12. 2007, 00:52:45
Dranel - a čo za to?
|
||
Jan Tvrdík Profil |
#12 · Zasláno: 27. 12. 2007, 01:01:27 · Upravil/a: Jan Tvrdík
To je fakt strašně napsaný, zkusím mu to celý přepsat :)
(Chvíli to potrvá) PS: Neručim za bezpečnost |
||
Jan Tvrdík Profil |
#13 · Zasláno: 27. 12. 2007, 01:30:40 · Upravil/a: Jan Tvrdík
Nevím, jak to přesně mělo fungovat, tak jsem to zkusil typnout.
Moje tři poznámky: 1. pokud nepředáš parametr kategorie, tak vypíše notice (nevěděl jsem, jak si to přeješ ošetřit) 2. Proměná $nazevstranky je vlastně zbytečná. Nevím, jestli je dál používaná, ale radši jsem ti ji tam nechal. 3. V bezpečnosti se nevyznám (já nikdy takhle šíleně soubory nenačítal), ale IMHO to moc bezpečný není function ukazstranku() { $pripony = array("php","htm","html"); if(isset($_GET['kat'])) $kategorie = $_GET['kat']; if(isset($_GET['rub'])) $rubrika = $_GET['rub']; if(isset($_GET['str'])) $stranka = $_GET['str']; if(!empty($stranka)) { $url = empty($rubrika) ? "$kategorie/$stranka" : "$kategorie/$rubrika/$stranka"; foreach ($pripony as $pripona) { if(is_file("$url.$pripona")) { $nazevstranky = "$stranka.$pripona"; require("$url.$pripona"); break; } } if(!isset($nazevstranky)) { $nazevstranky = "$stranka.htm"; require ("notfound.php"); } } else { foreach ($pripony as $pripona) { if(is_file("uvodnik/uvod.$pripona")) { $nazevstranky = $stranka.".php"; require ("uvodnik/$nazevstranky"); } } if(!isset($nazevstranky)) { $nazevstranky = "uvod.htm"; require ("notfound.php"); } } } |
||
Dranel Profil |
#14 · Zasláno: 27. 12. 2007, 02:12:02
Jan Tvrdík
Díky za ochotu, ale přečtěte si prosím toto vlákno ohledně isset() a empty() - řekl bych, že původní porovnávání <> bylo více na místě. Nicméně script vypadá výtečně - pokuste se ještě prosím opravit výše uvedené problémy. |
||
Jan Tvrdík Profil |
#15 · Zasláno: 27. 12. 2007, 02:44:30 · Upravil/a: Jan Tvrdík
Operátor <> používám nerad (Mám radši !=) a nevidím důvod proč ho použít zde. Použití isset a empty zde nezpůsobí žádné problémy. Jediná situace, kde by v současné době mohl nastat problém je, když se soubor bude jmenovat 0 (nula) + přípona, což si v reálné situace nedovedu představit.
Ohledně (1.) - řekni, jak chceš danou situaci řešit - killnout skript přes die(), nebo říct že soubor neexistuje, nebo oznámit uživateli že jeho IQ nebylo shledáno dostatečně vysoké pro prohlížení webu :) - stačí si vybrat Ohledně bezpečnosti je to celý IMHO strašně riskantně navržená archtektura. PS: Můžeme si tykat :o) |
||
Jan Tvrdík Profil |
#16 · Zasláno: 27. 12. 2007, 02:56:24
Ještě bych měl jednu otázku: Bude $nazevstranky ještě někde později použit ?
|
||
Jan Tvrdík Profil |
#17 · Zasláno: 27. 12. 2007, 03:00:31 · Upravil/a: Jan Tvrdík
Jinak ten kód co jsem posílal šel napsat samozřejmě i o kus kratší
function ukazstranku() { $pripony = array("php","htm","html"); if(isset($_GET['kat'])) $kategorie = $_GET['kat']; if(isset($_GET['rub'])) $rubrika = $_GET['rub']; if(isset($_GET['str'])) $stranka = $_GET['str']; if($stranka != "") { $url = $rubrika != "" ? "$kategorie/$stranka" : "$kategorie/$rubrika/$stranka"; foreach ($pripony as $pripona) { if(is_file("$url.$pripona")) { $nazevstranky = "$stranka.$pripona"; require("$url.$pripona"); break; } } } else { $stranka = "uvod"; foreach ($pripony as $pripona) { if(is_file("uvodnik/$stranka.$pripona")) { $nazevstranky = $stranka.".php"; require ("uvodnik/$nazevstranky"); } } } if(!isset($nazevstranky)) { $nazevstranky = "$stranka.htm"; require ("notfound.php"); } } |
||
Dranel Profil |
#18 · Zasláno: 27. 12. 2007, 03:04:49
Jan Tvrdík
PS: Můžeme si tykat :o) Promiň - já už jsem z tý webtvorby celej zblblej :-) Operátor <> používám nerad (Mám radši !=) a nevidím důvod proč ho použít zde. Mimochodem <> není to samé jako != (je to to samé jako !==) Ohledně (1.) Jak mu to oznámit? Načíst soubor notfound.php, který je v kořenu webu. Toď vše. Omluvy jsou totiž v tomto souboru :-) Ohledně bezpečnosti je to celý IMHO strašně riskantně navržená archtektura. Vím - půjde to přes DB. Tohle potřebuju na středně rozsáhlé weby, které budu tvořit pro lidi (za peníze). |
||
Jan Tvrdík Profil |
#19 · Zasláno: 27. 12. 2007, 03:06:42
Anebo ještě líp :)
function ukazstranku() { $pripony = array("php","htm","html"); if(isset($_GET['kat'])) $kategorie = $_GET['kat']; if(isset($_GET['rub'])) $rubrika = $_GET['rub']; if(isset($_GET['str'])) $stranka = $_GET['str']; if($stranka == "") { $stranka = "uvod"; $rubrika = ""; $kategorie = "uvodnik"; } $url = $rubrika != "" ? "$kategorie/$stranka" : "$kategorie/$rubrika/$stranka"; foreach ($pripony as $pripona) { if(is_file("$url.$pripona")) { $nazevstranky = "$stranka.$pripona"; require("$url.$pripona"); break; } } if(!isset($nazevstranky)) { $nazevstranky = "$stranka.htm"; require ("notfound.php"); } } |
||
Dranel Profil |
#20 · Zasláno: 27. 12. 2007, 03:08:20
Jan Tvrdík
To mě docela zajímá, co z toho ještě vymlátíš :D Počkám si schválně na ráno (ať tam pls něco zbyde) |
||
Jan Tvrdík Profil |
#21 · Zasláno: 27. 12. 2007, 03:17:33 · Upravil/a: Jan Tvrdík
Mimochodem <> není to samé jako != (je to to samé jako !==)
Ne, zkus si spustit tohle: <?php $a = "99"; $b = 99; echo "!= " . (int)($a != $b) . "<br>"; echo "!== " . (int)($a !== $b) . "<br>"; echo "<> " . (int)($a <> $b) . "<br>"; ?> function ukazstranku() { $pripony = array("php","htm","html"); if(isset($_GET['kat'])) $kategorie = $_GET['kat']; if(isset($_GET['rub'])) $rubrika = $_GET['rub']; else $rubrika = ""; if(isset($_GET['str'])) $stranka = $_GET['str']; if($stranka == "") { $stranka = "uvod"; $rubrika = ""; $kategorie = "uvodnik"; } if(isset($kategorie)) { $url = $rubrika != "" ? "$kategorie/$stranka" : "$kategorie/$rubrika/$stranka"; foreach ($pripony as $pripona) { if(is_file("$url.$pripona")) { $nazevstranky = "$stranka.$pripona"; require("$url.$pripona"); break; } } } if(!isset($nazevstranky)) { $nazevstranky = "$stranka.htm"; require ("notfound.php"); } } |
||
Jan Tvrdík Profil |
#22 · Zasláno: 27. 12. 2007, 03:22:04
Jinak IMHO je stejně ten zápis s empty lepší než
else $rubrika = ""; $rubrika != "" |
||
Časová prodleva: 16 let
|
0