URL - pełna ścieżka wraz z http://
PATH - katalog
Dawniej były wykrywane tylko raz przy instalacji. Są sytuacje, kiedy ścieżki ulegają zmianie:
1. Zakup domeny
2. Zmiana serwera
3. Kilka adresów lub domen, z www lub bez
W przypadku 1 i 2 admin musi zmienić ścieżki ręcznie w pliku konfiguracyjnym lub w panelu admina, bo system nie będzie działać. W przypadku 3 wystąpią problemy z sesjami, ciasteczkami i zabezpieczeniami.
Rozwiązaniem jest automatyczne wykrywanie ścieżki.
Jest 1 problem. Popatrzmy na drzewko plików i katalogów:
Kod
katalog
|--> admin
|-------> index.php - plik startowy panelu admina
|--> index.php - plik startowy części frontowej
|--> kernel.php - jądro systemu (tu następuje wykrycie ścieżki)
|--> request.php - plik startowy dla żądań AJAX
|--> login.php - plik startowy - logowanie
|--> fileman.php - plik startowy - menedżer plików
|--> admin
|-------> index.php - plik startowy panelu admina
|--> index.php - plik startowy części frontowej
|--> kernel.php - jądro systemu (tu następuje wykrycie ścieżki)
|--> request.php - plik startowy dla żądań AJAX
|--> login.php - plik startowy - logowanie
|--> fileman.php - plik startowy - menedżer plików
Jak widać, panel admina znajduje się w innym katalogu. Początek admin/index.php:
require './kernel.php';
Panel admina nie jest osobną aplikacją, dlatego ścieżka powinna być taka sama jak w przypadku pozostałych podstron. Niestety, jest ona błędna.
Powinniśmy otrzymać: /katalog/
Otrzymujemy: /katalog/admin/
Rozwiązanie 1
define('PATH', str_replace(array('//','/admin'), array('/',''), dirname($_SERVER['PHP_SELF']).'/'));
Może być więcej modułów w osobnych katalogach. Nie tylko 'admin'.
Rozwiązanie 2
Kopiować część kodu odpowiedzialną za wykrywanie URL? Jak widać, plików startowych jest dużo, a pełny kod jest następujący:
#Path based on PATH_INFO or GET param { } else { } #Detect full URL
Inne rozwiązanie?
Jak poprawnie wykryć ścieżkę?