Autoryzacja gdy PHP jest zainstalowane jako CGI w Apache
06 maja 2010
Czas najwyższy na jakiś wpis z konkretnymi poradami bo ostatnio jest tutaj z tym kiepsko...
Jak wiemy (albo i nie
) autoryzacja w PHP działa tylko wtedy gdy PHP jest zainstalowane jako moduł Apache (o innych serwerach dzisiaj pisać nie będę). Tak przynajmniej oficjalnie głosi dokumentacja. Jest jednak światełko w tunelu dla tych, którzy mają hosting z PHP postawionym jako CGI.
Poniżej opisane jest jedno z rozwiązań. Nie ma pewności, że będzie u Ciebie działało, zależy to od możliwości/ustawień Twojego konta hostingowego. U mnie działa
W komentarzach do wyżej podlinkowanej dokumentacji znajdziesz inne rozwiązania więc próbuj do skutku.
Pierwszy wymagany krok to ustawienie w pliku .htaccess odpowiedniej regułki. Wygląda ona tak:
-
RewriteEngine on
-
RewriteRule \.php$ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
W ten sposób ustawiamy w PHP specjalną wartość w tablicy $_SERVER z kluczem HTTP_AUTHORIZATION i danymi autoryzacyjnymi. Teraz wystarczy w PHP odczytać to co zaserwuje nam Apache takim kodem:
-
list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
-
}
Przemyśl dokładnie gdzie to wstawić w swój kod. Dzięki takiej sztuczce PHP dostanie dwie wartości, Twój login i hasło, tak jakbyś korzystał z modułu Apache.
Gdyby powyższe nie działało to można spróbować jeszcze takiego kodu w .htaccess (zamiennie do powyższego):
-
SetEnvIf Authorization "^(Basic .+)$" HTTP_AUTHORIZATION=$1
U siebie akurat stosuje ten drugi kod bo to było pierwsze rozwiązanie na które natrafiłem. Jednak na większości serwerów bardziej dostępny jest mod_rewrite niż mod_setenvif dlatego wybrałem taką kolejność podawanych rozwiązań.
Blog przede wszystkim o Internecie i mojej pasji jaką jest tworzenie stron www. Ale nie ograniczam się do jednej tematyki, piszę o wszystkim o czym mam ochotę :-)
Z napisał: 16.05.10 o godzinie 9:53
O właśnie brakowało mi kilku funkcji, fajnie że o tym piszesz
Michał napisał: 17.06.10 o godzinie 15:43
Ty masz php zainstalowane jako CGI.
Jeżeli tak to czy możesz używać w htaccess php_value albo php_flag
Pozdrawiam
Ps Co z twoim projektem ogólnopolskim ?
MariuszT napisał: 18.06.10 o godzinie 23:57
Odpowiedź na Twoje pytanie: http://php.net/manual/en/configuration.changes.php
Projekt ogólnopolski, jak to dumnie brzmi
Robi się. Jak się zrobi to napiszę.