2009-04-04 11 views
12

To jest dziwne, ale z jakiegoś powodu $_SERVER["SCRIPT_URI"] nie zwróci nazwy domeny, gdy jestem w podrzędnych/podstronach, ale będzie działać tylko na stronie głównej. Nie jestem pewien, czy jest to spowodowane skryptem (WordPress) czy hostem, ale czy możesz zaproponować jakieś niezawodne rozwiązanie do pobrania nazwy domeny za pomocą PHP?

+0

Być może myślałeś o '$ _SERVER ['REQUEST_URI']' – Kzqai

+0

@Kzqai 'SCRIPT_URI' jest udokumentowane w dokumentach Apache jako [zmienna środowiskowa utrzymywana przez mod_rewrite] (http://httpd.apache.org/ docs/2.2/en/mod/mod_rewrite.html # EnvVar) - stąd też powinien on być obecny w superglobalu '$ _SERVER'. Jednak, jak ustalił PO, nie zawsze jest on ustalany (z jakiegokolwiek powodu). – MrWhite

Odpowiedz

22

Jeśli potrzebujesz nazwę domeny, należy:

$_SERVER['HTTP_HOST'] 
+0

Och, ten działał dobrze !! nawet przy przepisywaniu adresu URL. Dzięki –

2

Może to być spowodowane przepisaniem adresu URL, możesz zamiast tego spróbować $ _SERVER ['REQUEST_URI'], jeśli chcesz, aby ścieżka była wywoływana w adresie URL.

+0

Jeśli wybierzesz tę metodę, pamiętaj, że nagłówki żądań mogą mieć na nią wpływ. –

+0

Rzeczywiście. Napisanie adresu URL. Ale nie chcę ścieżki, chcę tylko sprawdzić nazwę domeny. Dookoła? –

6

W zależności od tego, co chcesz, bym użyć jednej z następujących czynności:

  1. $ _SERVER [ 'PHP_SELF'] dla skryptu Lokalizacja pliku
  2. $ _SERVER [ 'SERVER_NAME'] dla nazwy hosta

From the php docs

EDYCJA: Może PHP_SELF nie jest najlepsze. Zobacz komentarze.

+0

Jak wiem, używanie $ _SERVER ['PHP_SELF'] jest absolutnym ryzykiem. http://is.gd/qPcb – sepehr

+1

Powinieneś raczej użyć '$ _SERVER ['SCRIPT_NAME']' zamiast PHP_SELF. –

18

przypadku wątpliwości

var_dump($_SERVER); 
+0

+1 Najlepsza rada! –

0

var_dump($_SERVER) i zobacz, co apartament potrzeb.

P.S. Używanie niesanitalizowanego $_SERVER["PHP_SELF"] może być security risk.

-3

Jeśli Twoja przeglądarka formatuje JSON dokumentów ładnie i nie ma wyjścia miało miejsce, dopisując poniższy spowoduje coś bardziej czytelny niż var_dump:

header('Content-Type: application/json');die(json_encode($_SERVER)); 

phpinfo() zapewni również listę wszystkich $_SERVER wartości i tak wiele więcej!

0

Również SCRIPT_URI nie istnieje, prawo składnia jest REQUEST_URI:

echo $_SERVER["REQUEST_URI"]; Zwraca całą ścieżkę bez hosta i domeny.

+0

'SCRIPT_URI' niekoniecznie jest błędne. Jest to udokumentowane w dokumentach Apache jako [zmienna środowiskowa utrzymywana przez mod_rewrite] (http://httpd.apache.org/docs/2.2/en/mod/mod_rewrite.html#EnvVar). Jednak, jak ustalił PO, nie zawsze jest on ustalany (z jakiegokolwiek powodu). Ale ... gdy jest ustawiony, to nie jest to samo co "REQUEST_URI". 'SCRIPT_URI' zawiera _absolute URL_, natomiast' REQUEST_URI' to względny URL ("bez hosta i domeny"). – MrWhite

0

używałem $ _SERVER [SCRIPT_URI] na mojej stronie http://www.a2zidx.com oraz szereg podkatalogów jak http://howto.a2zidx.com

miałem żadnego problemu z tym od lat i dzisiaj masz błąd w wielu miejscach, gdzie $ _SERVER [SCRIPT_URI] nie zostało przypisane. Po skontaktowaniu się z moją sondą oni twierdzą, że nie wprowadzili żadnych zmian, ale $ _SERVER [SCRIPT_URI] już nie działa. getenv ('SCRIPT_URI') nie zawiedzie, ale zwraca łańcuch pusty. Dlaczego tak się stało nagle po tylu latach, nie wiem. Skończyło się na tym, że wywołałem funkcję przechodzenia przez różne opcje, aby wyodrębnić nazwę pliku, co było tym, czego chciałem. Mam nadzieję, że to wszystko obejmuje. Miałem problemy w tym funkcji, ale sprawdzone "SCRIPT_NAME" "PHP_SELF" „SCRIPT_FILENAME "SCRIPT_URI"

nadzieję, że jego pomaga.

Jeśli ktoś wie, dlaczego SCRIPT_URI nagle przestałby działać, chciałbym to wiedzieć. Na serwerze działa obecnie Apache 2.4.

+0

Linki wyglądają bardzo podobnie do spamu. Zastanów się, czy nie zastąpić ich ogólnymi, takimi jak example.com – Norrius

Powiązane problemy