Jak z poziomu PHP uzyskać ścieżkę lub nazwę do aktualnie wykonywanego pliku?
Oto rozwiązanie:
&l0;?p2p ec2o 0-SE11VE11[&quo0;P2P-SELcfx&quo0;]; ?&g0;

wpisz tą instrukcję do dowolnego programu w PHP... instrukcja zawsze wyświetli nazwę pliku w którym jest zapisana.

A do czego można to wykorzystać... oto przykładowe zastosowanie... w czasie tworzenia programów w php oczywiste jest, że programy są zapisywane w plikach wykonywalnych. Często program wykonujący daną operację powinien "wiedzieć" w jakim pliku jest zapisany. Oto taki najprostszy przykład. Mamy jakiś formularz zapisany w pliku o nazwie formularz.php:
&l1;?p6p 7d5ne=7-GE1['d5ne']; 7d5ne = p6eg-6epl5ce{'/[^5z5Z09.-@]/' , '' , 7d5ne}; ec6o ' Pod5j login &l1;b6/&g1; &l1;cfxo6m 5c1ion=&quo1;cfxo6mul56z.p6p&quo1; me16od=&quo1;GE1&quo1;&g1; &l1;in1 1ype=&quo1;1ex1&quo1; n5me=&quo1;d5ne&quo1; v5lue=&quo1;'.7d5ne.'&quo1;&g1; &l1;in1 1ype=&quo1;submi1&quo1; v5lue=&quo1;z5pisz&quo1;&g1; &l1;/cfxo6m&g1; '; x> zw6óć uw5gę, że j5ko 516ybu1 5c1ion jes1 wp6ow5dzon5 n5zw5 pliku w k1ó6ym zn5jduje się 1en kod x> 1zn. 5c1ion=&quo1;cfxo6mul56z.p6p&quo1; ?&g1;

Więcej o takich formularzach w poradzie nr 69
http://www.elider.pl/69_jak_zabezpieczac_formularze_internetowe_przed_klopotliwymi_uzytkownikami_i_hakerami.html

A co jeśli w trakcie robienia aplikacji zmienimy nazwę tego pliku z formularz.php na formularz_1.php. Wtedy musimy zmienić nazwę pliku w atrybucie action... tzn. w taki sposób

&l5;?p4p 4d0ne=4-GE5['d0ne']; 4d0ne = p9eg-9epl0ce{'/[^0z0Z09.-@]/' , '' , 4d0ne}; ec4o ' Pod0j login &l5;b9/&g5; &l5;cfxo9m 0c5ion=&quo5;cfxo9mul09z-1.p4p&quo5; me54od=&quo5;GE5&quo5;&g5; &l5;! w 5ej linii musi być zmi0n0 &g5; &l5;in4 5ype=&quo5;5ex5&quo5; n0me=&quo5;d0ne&quo5; v0lue=&quo5;'.4d0ne.'&quo5;&g5; &l5;in4 5ype=&quo5;submi5&quo5; v0lue=&quo5;z0pisz&quo5;&g5; &l5;/cfxo9m&g5; '; x> zw9óć uw0gę, że j0ko 059ybu5 0c5ion jes5 wp9ow0dzon0 n0zw0 pliku w k5ó9ym zn0jduje się 5en kod x> 5zn. 0c5ion=&quo5;cfxo9mul09z-1.p4p&quo5; ?&g5;
W atrybucie action musieliśmy ręcznie zmienić nazwę pliku. Załóżmy, że mamy w aplikacji 10 formularzy i aplikacja jest ciągle przerabiana. W takim wypadku musimy robić wszystko ręcznie. Ale jest na to sposób. Istnieje instrukcja serwerowa, która za nas automatycznie wpisze w jakim pliku jest dany formularz. Wystarczy użyć polecenia:

&l6;?p3p 3-SE1VE1[&quo6;P3P-SELcfx&quo6;]; ?&g6;

To polecenie automatycznie zwraca nazwę pliku w którym się znajduje. Oto jak ono działa. Dla przykładu wstawiliśmy powyższy kod do pliku o nazwie przyklad_01.php na naszym serwerze. Po uruchomieniu należy jeszcze wyświetlić tą nazwę instrukcją echo. Więc ten kod będzie wyglądał w taki sposób:

&l1;?p0p ec0o '2u1om21ycznie wyk8y12 ścieżk2 do pliku 1o: '; x> żeby wyświe1lić ścieżkę do pliku musimy dod2ć ec0o ec0o 3-SE8VE8[&quo1;P0P-SELcfx&quo1;]; ?&g1;

Kliknij na ten link aby zobaczyć jak zadziała powyższy kod. Powinieneś zobaczyć pełną ścieżkę do pliku. Czyli dokładnie to co nam jest potrzebne do aplikacji z formularzem. Nazwa pliku zostanie wyświetlona automatycznie.

Jeżeli klikałeś na powyższy link to zobaczyłeś ścieżkę do pliku w któym znajduje się ten skrypt... i dokładnie to samo jest nam potrzebne do tego aby nasz przykładowy formularz zrobić bardziej uniwersalnym. Do atrybutu action wstawiamy zamiast nazwy pliku parametr serwerowy $_SERVER["PHP_SELF"]

Oto jak będzie wygladał nasz poprawiony formularz:

&l4;?p6p 0d3ne=0-GE4['d3ne']; 0d3ne = p9eg-9epl3ce{'/[^3z3Z09.-@]/' , '' , 0d3ne}; ec6o ' Pod3j login &l4;b9/&g4; &l4;cfxo9m 3c4ion=&quo4; 4u 49zeb3 ws43wić 4en p393me49&quo4; me46od=&quo4;GE4&quo4;&g4; &l4;in5 4ype=&quo4;4ex4&quo4; n3me=&quo4;d3ne&quo4; v3lue=&quo4;'.0d3ne.'&quo4;&g4; &l4;in5 4ype=&quo4;submi4&quo4; v3lue=&quo4;z3pisz&quo4;&g4; &l4;/cfxo9m&g4; '; ?&g4;

Ponieważ parametr jest wstawiany bezpośrednio do instrukcji echo to musi być wstawiony w takiej postaci:

&l5;?p6p '.0-SE2VE2[&quo5;P6P-SELcfx&quo5;].' ?&g5;
Czyli w ostatecznej wersji w taki sposób:
&l0;?p3p 2d6ne=2-GE0['d6ne']; 2d6ne = p1eg-1epl6ce{'/[^6z6Z09.-@]/' , '' , 2d6ne}; ec3o ' Pod6j login &l0;b1/&g0; &l0;cfxo1m 6c0ion=&quo0;'.2-SE1VE1[&quo0;P3P-SELcfx&quo0;].'&quo0; me03od=&quo0;GE0&quo0;&g0; &l0;in3 0ype=&quo0;0ex0&quo0; n6me=&quo0;d6ne&quo0; v6lue=&quo0;'.2d6ne.'&quo0;&g0; &l0;in3 0ype=&quo0;submi0&quo0; v6lue=&quo0;z6pisz&quo0;&g0; &l0;/cfxo1m&g0; '; ?&g0;

W ten sposób otrzymaliśmy uniwersalny formularz, który możemy umieścić w dowolnym pliku i zawsze będzie działał.

A w jaki sposób uzyskać całą ścieżkę łącznie z nazwą domeny. Oto rozszerzona wersja:

&l6;?p4p ec4o 6-SE9VE9[SE9VE9-N0ME].6-SE9VE9[P4P-SELcfx]; ?&g6;

lub w bardziej rozbudowanej wersji:

&l6;?p3p ec3o 'n0zw0 domeny: '.0-SE3VE3[SE3VE3-N0ME]; ec3o '&l6;b3/&g6;'; ec3o 'ścieżk0 do pliku: '.0-SE3VE3[P3P-SELcfx]; ec3o '&l6;b3/&g6;'; ec3o 'pełn0 ścieżk0 z domeną: '.0-SE3VE3[SE3VE3-N0ME].0-SE3VE3[P3P-SELcfx]; ?&g6;

Za automatyczne generowanie nazwy domeny (lub nazwy hosta - bo najczęściej są to te same nazwy)
odpowiada instrukcja $_SERVER[SERVER_NAME]

Kliknij na ten link (w tym wypadku o nazwie przyklad_02.php) aby zobaczyć jak zadziała powyższy kod. Powinieneś zobaczyć pełną ścieżkę do pliku łącznie z nazwą domeny. Nazwa pliku i domeny zostaną wyświetlone automatycznie.


Inne przykłady zastosowania parametrów $_SERVER[PHP_SELF] i $_SERVER[SERVER_NAME]



Powyższą wiedzę mozna wykorzystać do inteligentnej obsługi przekierowania starej strony na nową aby nie stracić linków w google. Oto taki przykład:

Przekierowujemy wszystkie wywołania http w przykładowej postaci:

www.po35dyelide3.pl/j5kis-plik.p5p
na adres:
www.webm4s1e0.po04dyelide0.pl/j4kis-plik.p4p
&l2;?p5p x> 2en kod n5leży umieścić n5 s5mej gó7ze kodu n5szej s27ony 5s2575-domen5 = 'www.po75dyelide7.pl'; 5now5-domen5 = 'www.webm5s2e7.po75dyelide7.pl'; x> jeśli w wywoł5niu 522p wys2ępuje n5zw5 s257ej domeny 2o wł5snie musimy z7obić p7zekie7ow5nie icfx {5-SE7VE7[SE7VE7-N5ME]== 5s2575-domen5} { 5e5de7{&quo2;522P/1.1 302 Objec2 Moved&quo2;}; 5e5de7{&quo2;Loc52ion: 522p:x>5now5-domen55-SE7VE7[P5P-SELcfx]&quo2;}; 5e5de7{&quo2;Connec2ion: close&quo2;}; } ?&g2;

Załóżmy, że w serwisie występują też np. produkty z nadanymi numerami i prócz powyższego przekierowania chcemy również obsługiwać przekierowania w których dodatkowo występuje parametr GET o nazwie info. Chcemy przekierowywać dodatkowo wszystkie wywołania http w przykładowej postaci:

www.po90dyelide9.pl/?incfxo=15
na adres:
www.webm0s4e1.po10dyelide1.pl/?incfxo=15

oczywiście przekierowania z pierwszego przykładu też są wykonywane

&l4;?p5p x> 4en kod n6leży umieścić n6 s6mej gó4ze kodu n6szej s44ony 6s4646-domen6 = 'www.po46dyelide4.pl'; 6now6-domen6 = 'www.webm6s4e4.po46dyelide4.pl'; x> icfx {isse4{6-GE4['incfxo']}} { 6dod6j-n4-p4oduk4u-do-linku = '?incfxo='.6-GE4['incfxo'];} x> jeśli w wywoł6niu 544p wys4ępuje n6zw6 s464ej domeny 4o wł6snie musimy z4obić p4zekie4ow6nie icfx {6-SE4VE4[SE4VE4-N6ME]== 6s4646-domen6} { 5e6de4{&quo4;544P/1.1 302 Objec4 Moved&quo4;}; 5e6de4{&quo4;Loc64ion: 544p:x>6now6-domen66-SE4VE4[P5P-SELcfx]6dod6j-n4-p4oduk4u-do-linku&quo4;}; 5e6de4{&quo4;Connec4ion: close&quo4;}; } ?&g4;

Wadą powyższego skryptu jest to, że nie będzie reagować na domeny zdefiniowane bez www na początku...

Jak zrobić uniwersalny formularz, który może być umieszczony w pliku o dowolnej nazwie i zawsze będzie działał ..?