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 :P ) 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:

CODE:
  1. RewriteEngine on
  2. 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:

PHP:
  1. if(isset($_SERVER['HTTP_AUTHORIZATION']) AND $_SERVER['HTTP_AUTHORIZATION'] != '') {
  2.   list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
  3. }

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):

CODE:
  1. 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ń.

Dodaj komentarz

3 odpowiedzi dla tego wpisu

  1. Z napisał:

    O właśnie brakowało mi kilku funkcji, fajnie że o tym piszesz

  2. Michał napisał:

    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 ?

  3. MariuszT napisał:

    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ę.

Odpowiedz



Podobne wpisy: