Autor | Zpráva | ||
---|---|---|---|
nethor Profil |
#1 · Zasláno: 7. 6. 2011, 16:08:38
Zdravím, prosím o radu.
V rootu mám adresář 'moduly' a v něm složky s jednotlivými moduly (většinou formuláře) (konktétně např. 'napiste'). Cesta ke scriptu modulu je tedy ./moduly/napiste/index.php . Do indexu v rootu moduly vkládám: include './moduly/napiste/index.php '; Potřeboval bych 2 věci: (Tak, aby to chodilo na doméně i localhostu bez přepisování) 1) Zjistit adresu na aktuální stránku - pro param. action ve formuláři. // To mám nyní : action="<? echo "http://".$_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] ;?>" // Připadá mi to krkolomné , ale nic lepšího jsem nerozchodil - // používám v .htaccess RewriteRule 2) Zjistit cesu k aktuálnímu adresáři modulu (př:'./moduly/napiste/') Pro include dalších souborů, např. fontu pro captcha A to fakt nevim, žádnou použitelnou konstantu jsem nenašel. Dolovat, to přes regulár mi připadá dovočina a zadávat růčo v každém modulu pakárna. Jde to nějak elegantně? |
||
Darker Profil |
#2 · Zasláno: 7. 6. 2011, 17:43:47
Celá adresa je součástí requestu, který zasílá prohlížeč, takže se můžeš skusit podívat, jak to z něj vydolovat.
|
||
Davex Profil |
#3 · Zasláno: 7. 6. 2011, 21:32:11
nethor:
> 2) Zjistit cesu k aktuálnímu adresáři modulu (př:'./moduly/napiste/') > Pro include dalších souborů, např. fontu pro captcha dirname(__FILE__) nebo v PHP 5.3 konstanta __DIR__ .
|
||
Tori Profil |
#4 · Zasláno: 7. 6. 2011, 21:37:03
Když jde o includování, tak předpokládám, že chcete zjistit cestu k souboru, nikoli URL. Celkem snadné řešení je nadefinovat si absolutní cestu k nejvyššímu adresáři aplikace (rootu) jako konstantu, a všechny ostatní cesty zadávat relativně k ní. Pak je celkem jedno, v jakém adresáři je celá aplikace umístěná.
// /index.php define('APPROOT', dirname(__FILE__) . '/'); include APPROOT . 'moduly/napisto/index.php'; define('ROOT_URL', "http://".$_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']); |
||
nethor Profil |
#5 · Zasláno: 8. 6. 2011, 11:54:04
Davex:
dirname(__FILE__) kupodivu funguje. To jsem nečekal, na hostingu mi to v cestě píše / , zatímco na localu \ . Na localu (win xp) lze v adrese kombinovat \ a / . Takže vyřešeno. Díky. |
||
Tori Profil |
#6 · Zasláno: 8. 6. 2011, 13:08:35 · Upravil/a: Tori
nethor:
Kdybyste chtěl, aby se v cestě na windows automaticky použilo zpětné lomítko a na linuxu obyčejné, využijte konstantu DIRECTORY_SEPARATOR. Nicméně - jak píšete - na windows by měly fungovat cesty s oběma druhy lomítek. |
||
nethor Profil |
#7 · Zasláno: 8. 6. 2011, 13:19:48
Tori:
Ok. Díky. .. ještě k #4: šlo mi o použití include v modulech - např. v souboru 'moduly/napisto/index.php', ne v indexu v rootu. Ale je to vyřešeno. |
||
Tori Profil |
#8 · Zasláno: 8. 6. 2011, 13:46:24
nethor:
„šlo mi o použití include v modulech“ No vždyť ano. Pokud se nebude na různých umístěních měnit adresářová struktura aplikace, tak by APPROOT . "modules/cokoliv/x.php" fungovalo z jakkoli vnořeného adresáře, i mimo root, protože v konstantě je absolutní cesta k rootu. |
||
nethor Profil |
#9 · Zasláno: 9. 6. 2011, 15:11:35
Tori:
Jde o to, že v každém modulu musím ručně vypisovat "modules/cokoliv/" , a když např. změním a adresář 'modules' třeba na 'moduly' , tak to musím opět ve všech scriptech ručně přepsat. To jsem chtěl právě ošetřit scriptem, aby byly moduly přenosné. Davex: „dirname(__FILE__)“ pro include funguje. Teď jsem ale narazil na to, že nejde použít pro odkazy v modulu nebo třeba pro vložení <img> captcha (v adresáři modulu). Na to by byla potřeba opět URL. |
||
Tori Profil |
#10 · Zasláno: 9. 6. 2011, 19:28:09
nethor:
„když např. změním a adresář 'modules' třeba na 'moduly' , tak to musím opět ve všech scriptech ručně přepsat.“ Aha. Tak můžete nadefinovat konstantu pro cestu ke všem modulům (APPROOT . 'modules') - pak ji budete přepisovat jen na jednom místě. Jinak - mohou se měnit i názvy podadresářů v /modules? To by šlo udělat jako flexibilní asi snáze, než zjišťování, jestli se modules přejmenovalo na moduly nebo třeba plugins. |
||
nethor Profil |
#11 · Zasláno: 10. 6. 2011, 00:33:47
Tori:
Jádro pudla je zcela jinde. Jde o to scriptem zjistit url adresu k adresáři scriptu. Také viz problém #9 RE: Davex: |
||
Davex Profil |
#12 · Zasláno: 10. 6. 2011, 18:16:54
nethor:
„Jde o to scriptem zjistit url adresu k adresáři scriptu.“ Projdi si pole $_SERVER a něco se ti bude hodit. Obecně stačí ze začátku cesty k modulu odebrat adresář ke kořeni webu nebo adresář volajícího skriptu.
Když použiješ Torinu konstantu APROOT , tak zjednodušeně asi nějak takto (ještě si pohraj s různým oddělovačem adresářů):
$modul = str_replace(APROOT, '', dirname(__FILE__)); |
||
Časová prodleva: 13 let
|
0