Autor | Zpráva | ||
---|---|---|---|
aktual_url Profil * |
#1 · Zasláno: 6. 11. 2012, 17:45:47
Jak zjistit aktuální kompletní url? Příklady, co jsem našel vždy vracely pouze cestu bez volaných parametrů.
Jde to udělat bez zjištění jednotlivých parametrů a jejich následného vložení do url? Děkuji |
||
Darker Profil |
On je tu problém s věcmi jako .htaccess. Pokud ale tvůj server parametry v url prostě přeloží na $_GET, stačí si hodnoty složit zpět do řetězce:
$params=""; foreach($_GET as $name=>$value) { if($params!="") //před každým záznamem přidáme & $params.="&"; $params.= "$name=$value"; } aktual_url: „Jde to udělat bez zjištění jednotlivých parametrů a jejich následného vložení do url?“ Tohle jsem si asi před psaním odpovědi měl přečíst. Existuje možnost otevřít si stream přímo na data, co poslal uživatel pomocí fopen. Na hostingu mi to ale nefungovalo, prý „z bezpečnostních důvodů“. $input = fopen("php://input", "r"); GET /?action=vtopic&forum=9 HTTP/1.1 Host: diskuse.jakpsatweb.cz User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0 Referer: Diskuse JPW <- tohle mi upravil parser zpráv Cookie: /*to tak*/ Cache-Control: max-age=0 |
||
Chro Profil |
#3 · Zasláno: 6. 11. 2012, 18:17:04
Nebylo by jednodušší
echo $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; |
||
Darker Profil |
#4 · Zasláno: 6. 11. 2012, 19:12:11
Chro:
Nebyl jsem si jistý, jestli to v tom request URI je, což bude tím, že jsem si před psaním odpovědi zobrazil toto. URI se tam tváří jako path, asi mě to zmátlo. |
||
aktual_url Profil * |
#5 · Zasláno: 6. 11. 2012, 20:35:53
$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
to mě vrátí cestu, ale bez parametrů (tzn. k ?, a pak už nic). V čem by mohl být problém? Záleží na webhostingu? |
||
Darker Profil |
#6 · Zasláno: 6. 11. 2012, 20:47:09
aktual_url:
„to mě vrátí cestu, ale bez parametrů“ Ne, spíš se zdá, že jsem se přece jen nemýlil. V manuálu se sice píše: The URI which was given in order to access this page; for instance, '/index.html'. |
||
ShiraNai7 Profil |
#7 · Zasláno: 6. 11. 2012, 21:53:22
Querystring (ty "parametry") by určitě měl být součástí
$_SERVER['REQUEST_URI'] . Je $_SERVER['REQUEST_URI'] vůbec definováno? (Jestli se ti náhodou nevypisuje jenom host).
|
||
Norman Profil |
#8 · Zasláno: 7. 11. 2012, 16:56:08
Darker:
tvoje řešení by sice fungovat mohlo, ale proč si to neulehčit http_build_query($_GET) :)
Nicméně tohle je celkem kloudná cesta :) |
||
Majkl578 Profil |
#9 · Zasláno: 7. 11. 2012, 18:18:18
$_SERVER['REQUEST_URI'] obsahuje vždy celou cestu včetně GET parametrů. Případně lze použít i pesimistickou verzi pro některé starší web servery, kterou používá Nette.
Norman: „tvoje řešení by sice fungovat mohlo, ale proč si to neulehčit http_build_query($_GET) :)“ Protože výstup nebude totožný. Například pro query string v původní URL a=1&b=2&a=3 bude výstup a=3&b=2 , což zjevně není totéž (a kvůli kanonizaci URL je to nežádoucí).
„Nicméně tohle je celkem kloudná cesta :)“ To je akorát zmatenější varianta výše zmíněného. aktual_url: > $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; > to mě vrátí cestu, ale bez parametrů (tzn. k ?, a pak už nic). V čem by mohl být problém? Záleží na webhostingu? Je něco v $_SERVER['QUERY_STRING']? Problémy by mohl dělat i mod_rewrite. Bylo by asi vhodné, kdybys dodal odkaz na funkční script vypisující phpinfo. |
||
Norman Profil |
#10 · Zasláno: 7. 11. 2012, 20:03:34
Majkl578
Protože výstup nebude totožný. Například pro query string v původní URL a=1&b=2&a=3 bude výstup a=3&b=2, což zjevně není totéž (a kvůli kanonizaci URL je to nežádoucí). Nechci rejpat, ale myslím, že nepočístáš s tím, že klíče v poli se přepisujou :) Čili: v poli $_GET a=1&b=2&a=3 bude pole kde a = 3 a b = 2. takže http_build_query je naprosto v pořádku. To je akorát zmatenější varianta výše zmíněného. Je to nejlepší řešení ze zde zmíněných :) nevidím na tom nic zmateného |
||
Majkl578 Profil |
#11 · Zasláno: 7. 11. 2012, 20:14:35
Norman:
„Nechci rejpat, ale myslím, že nepočístáš s tím, že klíče v poli se přepisujou :)“ Mýlíš se. Počítám s tím a právě to je ten problém. Pokud chci zjistit aktuální URL, je zajisté žádoucí získat ji v originální podobě. Toho zjevně není pomocí http_build_query v mnou uvedeném případě možné (snad se shodneme, že a=1&b=2&a=3 a a=3&b=2 jsou odlišné řetězce a druhý tedy není ekvivalentem prvního, ač v $_GET se to tak může zdát).
|
||
Norman Profil |
#12 · Zasláno: 7. 11. 2012, 20:17:57
Majkl578
Mýlíš se. Počítám s tím a právě to je ten problém. Pokud chci zjistit aktuální URL, je zajisté žádoucí získat ji v originální podobě. Toho zjevně není pomocí http_build_query v mnou uvedeném případě možné (snad se shodneme, že a=1&b=2&a=3 a a=3&b=2 jsou odlišné řetězce a druhý tedy není ekvivalentem prvního, ač v $_GET se to tak může zdát). Ano, ty chceš získat url v originální podobě, ovšem já jsem mluvil v kontextu s prvním příkaldem darkera: $params=""; foreach($_GET as $name=>$value) { if($params!="") //před každým záznamem přidáme & $params.="&"; $params.= "$name=$value"; } k čemuž je ekvivalent http_build_query :) protože čerpá z pole $_GET kde se klíče přepisují :) |
||
Časová prodleva: 11 let
|
0