Autor Zpráva
aktual_url
Profil *
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";
}
Tahle funkce si neporadí s parametry typu =0&a[1]=1]=0&a[1]=1]=0&a[1]=1]=0&a[1]=1]=0&a[1]=1]=0&a[1]=1]http://example.com/skript.php?a[0]=0&a[1]=1. Vím, že jsem někde dělal funkci co umí i toto, ta už je ale o dost složitější a rekurzivní.

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");
Přečteš např.:
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
Nebylo by jednodušší
echo $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
Darker
Profil
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 *
$_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
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'. 
Možná tu hraje roli rozdíl mezi URI a URL.
ShiraNai7
Profil
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
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
$_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
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
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
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í :)

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: