Autoryzacja BASIC w php-fcgi
Autoryzacja podstawowa HTTP, wg większości tutoriali dostępnych w necie, jest z poziomu PHP trywialna. Wystarczy sprawdzić zawartość zmiennych $_SERVER['PHP_AUTH_USER'] i $_SERVER['PHP_AUTH_PW'] i w razie potrzeby wysyłać cyklicznie nagłówek HTTP 401 - Unauthorized.
W przypadku, gdy PHP działa jako moduł serwera Apache (mod_php), wszystko znakomicie działa. Problem robi się wtedy, gdy nasz provider stawia na (swoje) bezpieczeństwo i PHP uruchamia w trybie CGI/FastCGI.
Może nas czekać wtedy dosyć niemiła niespodzianka - wspomniane wcześniej zmienne… mogą nie istnieć, a raczej nie być widoczne w skryptach PHP.
Rozwiązania tego problemu mogą być dwa: albo męczenie swojego usługodawcy, aby postarał się o przenoszenie nagłówków HTTP Authorization do parsera PHP, albo też zastosowanie pewnego triku. Wymagana do tego będzie jedynie obsługa i możliwość konfiguracji przez użytkownika modułu mod_rewrite.
Do pliku .htaccess dopisujemy następujące linijki:
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
Do pliku PHP, w którym wykonujemy autoryzację, na samym początku dopisujemy:
list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
Dalej już należy postępować zgodnie z dostępnymi kursami.