Autor Zpráva
nethor
Profil
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
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
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
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';
Zrovna tak si můžete nadefinovat URL webu:
define('ROOT_URL', "http://".$_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']);
nethor
Profil
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
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
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
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
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
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
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
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__));  

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:

0