2011-07-16 15 views
10

Mam framework php i użyłem $_SERVER['SCRIPT_NAME'] do optymalizacji przenośności. W ten sposób nie muszę już ręcznie konfigurować ścieżki.

$this->base_url = str_replace('index.php', '', 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME']); 

Ale zauważyłem, że $_SERVER['SCRIPT_NAME'] i $_SERVER['PHP_SELF'] zwraca dokładnie ten sam ciąg. Jaka jest różnica? Jak powinienem wybrać między nimi?

+0

Instrukcja jest więcej niż oczywista , http://in2.php.net/manual/en/reserved.variables.server.php, jednak twój skrypt może być ograniczony przez wiele czynników, host internetowy mógł skonfigurować twoje środowisko w taki sposób, że możesz nie być w stanie zobaczyć rzeczywistej ścieżki systemu plików dla indeksu scriptname, btw, wolałbym zrobić RTFM, a następnie googlowanie, możesz dowiedzieć się więcej, robiąc to sam :-) – Kumar

+1

Przeczytałem to wiele razy, zanim zapytam tutaj. Nie prosiłbym tutaj inaczej. –

+0

proszę, nie czuj się urażony moim komentarzem, po prostu dodawałem do tego, co mówi instrukcja, cieszę się, że dostałem twoją odpowiedź, jestem bardziej zrób to sam facet, przeważnie znajduję moją odpowiedź w rzeczowej mody – Kumar

Odpowiedz

9

Różnica

http://sandbox.phpcode.eu/g/3e38d.php/test 

Nazwa skryptu jest absolutna ścieżka do pliku.

PHP_SELF jest scenariusz w którym aktualnie jesteś (wraz z "drogi" po .php)

To jak $_SERVER['SERVER_NAME'] i $_SERVER['HTTP_HOST']

http://sandbox.phpcode.eu./g/f5093.php 

http://sandbox.phpcode.eu/g/f5093.php 

spot jedna różnica

+1

to było naprawdę bardzo pomocne (: –

+1

i twoje pytanie też! :) – genesis

+0

"Nazwa skryptu to abs olute ścieżkę do pliku. "-' SCRIPT_NAME' jest względne, a nie _absolute. "SCRIPT_FILENAME" zawiera bezwzględną ścieżkę (chociaż niekoniecznie jest to ten sam plik, co "SCRIPT_NAME"). – MrWhite

7
SCRIPT_NAME 

Zawiera ścieżkę bieżącego skryptu. Jest to przydatne w przypadku stron, które muszą wskazywać na siebie. Stała __FILE__ zawiera pełną ścieżkę i nazwę pliku bieżącego (tj. Zawartego) pliku.

PHP_SELF 

Nazwa pliku skryptu aktualnie wykonującego, w stosunku do głównego dokumentu. Na przykład $_SERVER['PHP_SELF'] w skrypcie pod adresem http://example.com/test.php/foo.bar będzie /test.php/foo.bar. Stała __FILE__ zawiera pełną ścieżkę i nazwę pliku bieżącego (tj. Zawartego) pliku. Jeśli PHP działa jako procesor wiersza poleceń, ta zmienna zawiera nazwę skryptu od PHP 4.3.0. Wcześniej nie był dostępny.

źródło php.net

Jest jedna rzecz:

Wyjazd http://www.yoursite.com/example/index.php/dir/test

w $_SERVER['PHP_SELF'] == '/example/index.php/dir/test';

w $_SERVER['SCRIPT_NAME'] == '/example/index.php';

ETA: Próbowaliśmy mysel f

Tried to na localhost http://127.0.0.1:8887/index.php/dir/test

echo $_SERVER['PHP_SELF'] . "<br />"; 
echo $_SERVER['SCRIPT_NAME']; 

wyjściowa wynosi:

/index.php/dir/test 
/index.php 
+0

ten przykład, który zwraca '/ dir/test' jest najwyraźniej błędny ... –

+0

nie, to nie jest źle.Spójrz tutaj: http://sandbox.phpcode.eu/g/3e38d.php/test – genesis

+0

Zauważ, że przykład tutaj wyklucza nazwę pliku 'index.php' i co dzieje się między nim a nazwą serwera. w @genesis link poprawnie zwraca'/g/3e38d.php/test' zamiast zwracać tylko '/ test' –

Powiązane problemy