Autor | Zpráva | ||
---|---|---|---|
Punk-turtle Profil |
#1 · Zasláno: 23. 4. 2012, 19:23:21
Dobrý den, rád bych začal s PHP a tak jsem si podle knihy (Programování WWW stránek pro úplné začátečníky od Martina Mikuľáka) rozdělil hotové stránky na části -hlavicka, menu, paticka atd. a pomocí require části vložil do stránky.
V pořádku funguje. Problém nastal, když chci vytvořit nějaký systém adresářů. Nevím, jak nastavit cesty v odkazech např. hlavního menu. Ať dělám co dělám, menu mi funguje pouze po vložení do souborů uložených v kořenovém adresáři. Jakmile jej vložím do do souborů hlouběji v adresářové struktuře, nefunguje. Chápu, že je to asi tím, že z podadresáře je k určitému souboru logicky jiná cesta než z kořene. Trochu jsem to vyřešil tak, že jsem cesty uvedl celé, např. /mojestranky/recepty/gulas.php atd. To sice funguje, jenže na localhostu, kde mám vlastně celé stránky v /opt/lampp/htdocs/mojestranky. Pokud je budu aplikovat na server, kde jako kořen je třeba adresář www, tak to fungovat nebude anebo bych musel všude v cestách změnit mojestranky na www. Jak se to tedy správně a elegantně udělá? |
||
Borius Profil |
#2 · Zasláno: 24. 4. 2012, 06:06:28
Punk-turtle:
Rozumím tomu tak, že sis vytvořil jakýsi šablonový systém, kde do hlavního – vždy volaného – skriptu vkládáš jednotlivé části stránky. To by mělo být v pořádku a mělo by to fungovat. Bez ukázky kódu nelze chybu určit. |
||
nemeja Profil |
Punk-turtle:
„/mojestranky/recepty/gulas.php“ problém bude možná v tom, že lomítko na začátku, značí root. Pokud máš první soubor do kterého vkládáš třeba v rootu tzn. "/mojestranky/" tak cesta k souboru gulas.php je "recepty/gulas.php" , třeba ti to pomůže :)
|
||
Punk-turtle Profil |
#4 · Zasláno: 24. 4. 2012, 08:26:15
Takže vyřešeno, zkusil jsem to hodit na ostrý server a pokud adresy skutečně začínají lomítky a cesty jsou adresované od roota (/recepty/gulas.php), vše funguje jak má.
Problém byl v tom, že používám xampp a třeba tyto stránky mám uloženy v /opt/lampp/htdocs/mojestránky. Jenže pro xampp je root v /opt/lampp/htdocs, takže hledal volané soubory tam. Jen teď nevím, jak tedy stránky zkoušet na localhostu... |
||
Borius Profil |
#5 · Zasláno: 24. 4. 2012, 08:39:51
Viděl bych dvě možnosti, jak na localhost:
1) Pokud si stránky umístíš taktéž přímo do rootu (čili do ‘htdocs/’), pak Ti i tam budou cesty fungovat. 2) Použít relativní cesty – a budou Ti fungovat kdekoli. To je asi použitelnější varianta. |
||
Punk-turtle Profil |
#6 · Zasláno: 24. 4. 2012, 08:44:30
Do rootu je umístit nemohu, protože tam je např. index.php který spouští administrační rozhraní xamppu a jiné soubory. Navíc když budu vyvíjet více www najednou, musím je mít v separé složkách.
Relativní cesty mi právě nefungují, ztrácejí smysl tím, že skripty, které je používají jsou volány na různá místa. |
||
Ugo Profil |
#7 · Zasláno: 24. 4. 2012, 08:47:17
neřeš relativní cesty, absolutní adresu volaného souboru najdeš takto:
PHP > 5.3 - konstanta __DIR__ PHP < 5.3 - dirname(__FILE__) čili cesty budeš mít jakoby relativně, ale hodíš před ně toto include(dirname(__FILE__)."/recepty/gulas.php"); doporučuji udělat vlastní konstantu z onoho dirname() jestli nemáš všude php > 5.3 |
||
Tori Profil |
#8 · Zasláno: 24. 4. 2012, 09:29:24
Punk-turtle:
Další možnost (k těm v [#5]) je přesměrovat všechny požadavky na jeden skript (např. /index.php). Ten potom includuje jak hlavičku, tak např. recepty/gulas.php. V tom případě by se použil adresář s index.php jako základní, a cesty byste psal relativně k tomuto adresáři (viz [#7]). Jestli to chcete vyzkoušet, zjistěte si, jestli váš hosting umožňuje použít soubor .htaccess. |
||
Punk-turtle Profil |
#9 · Zasláno: 24. 4. 2012, 09:48:22
.htaccess používám, protože mám subdomény a aliasy, ale jinak nerozumím, jak to myslíte, opravdu s tím začínám.
|
||
Tori Profil |
#10 · Zasláno: 26. 4. 2012, 02:01:43
Punk-turtle:
.htaccess, který dáte do adresáře s index.php (=nejvyšší adresář webu): RewriteCond %{REQUEST_FILENAME} .*\.php [OR] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [L,QSA] /index.php: <?php // cesta k nejvyššímu adresáři aplikace, (bez koncového lomítka!) define('APPROOT', dirname(__FILE__)); // požadovaná URL (= cesta k souboru, který se má includovat, vždy začíná lomítkem) $soubor = str_replace(APPROOT, '', $_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI']); if ($soubor === '/' || !is_file(APPROOT.$soubor)) { $soubor = 'obsah.php'; // výchozí hodnota, pokud uživ.nezadá jméno skriptu ("localhost/mojestránky/") } include APPROOT . $soubor; ?> /recepty.php, /recepty/gulas.php, /recepty/zverina/muflon/nadivany/s-jalovcem/kde-se-vari.php, ... - všude to už napíšete stejně: <?php include APPROOT . '/includes/hlavicka.php'; // .... include APPROOT . '/includes/paticka.php'; |
||
Časová prodleva: 12 let
|
0