Witajcie
to co napisałem niżej jest strasznie wymęczone, ale sam skrypt jest
dobrze napisany. Jestem niewyspany, ostatnio mało sypiam, mam
mało siły, żeby tego posta jakoś wyrzeźbić, więc nie krzyczcie ;-)
Napisałem już większą część skryptu, problem mam z ostatnią
funkcją, w której nawet skopiowałem główną część z innej, działającej.
Cały mechanizm wywoływany jest z głównego pliku(index) includem
skryptu php o nazwie rejestruj.
Więc.
Skrypt pobiera dane gościa:i ip, nazwę hosta i ew. adres zza proxy.
Wraz z datą i czasem skrypt zapisuje dane gościa w logach.
Następnym krokiem w pliku rejestruj jest sprawdzenie, czy gościem jest ktoś
z blokowanych adresów. Wykonywane jest to w taki sposób:
$pS = pracownikSerwisu($adresIP, $IP_XFF);
// i jeżeli to pracownik...
if($pS) {
// ... sprawdź, czy gość z tego adresu już tu kiedyś był...
$tS = testS($adresIP, $IP_XFF);
// ... i jeżeli był: zablokuj
if($tS){ $zablokuj = true; }
// a gdyby go jeszcze nie było: zapisz fakt odwiedzin
else zapiszLog($adresIP, $host, $IP_XFF, 'archiwum/adresyS.txt');
// strona laduje sie pierwszy raz, i ostatni
}
Zmienna $zablokuj sprawdzana jest w głownym pliku...
if($zablokuj) return 1;
... i gdy trzeba, kończy działanie skryptu.
Podobnego sposobu użyłem dla blokowania gości zza proxy.
if( czyProxy($adresIP) ) { $proxy = true; }
else $proxy = false;
Główny skrypt(index):
if($proxy) {
echo "<span>Wystapil blizej niezidentyfikowany problem.</span>";
return 2;
}
Teraz okazuje się, że pierwsze rozwiązanie ustala zmienną $zablokuj tak
jak trzeba, drugi skrypt niestety nikogo nie blokuje. Działam na danych
testowych, mam kontrolne echo i wypisywanie zmiennych i według tego
wszystko działa. Dorzuciłem również test zmiennej w głównym skrypcie
przed głównym sprawdzaniem:
if(isset($proxy)) {
echo $proxy;
echo "bpb/";
} else "bp/";
Ku mojemu zdziwieniu, wyświetla się tylko tekst 'bpb/', czyli zmienna
$proxy jest zarejestrowana, ale jest pusta.
Jeżeli linijkę po użyciu funkcji czyProxy() przypiszę zmiennej $proxy
wartość true, skrypt działa. Z początku myślałem, podczas poprzedniej
konfiguracji, że coś jest nie tak podczas przypisywania do zmiennej
wyniku działania funkcji:
$proxy = czyProxy($adresIP);
jednak po zmianie na obecną, czyli najpierw if(), później przypisanie
ręczne, nic się nie zmieniło.
Teraz właśnie dodałem przed testem isset() test empty() i wyszło na to
że zmienna $proxy jest pusta, czyli generalnie zmienna jest.
Wywoływania funkcji wraz ze zmiennymi są następujące:
(zagnieżdżenie)
index.php <- rejestruj.php <- funkcje.php; index ma include
z rejestruj, a rejestruj ma include funkcje.php.
testS() z funkcje.php, wywyoływana w rejestruj.php i na podstawie wyniku
w pliku rejestruj.php zmienna $zablokuj jest ustawiona na true i użyta
w pliku index.php(jest deklarowana/inicjowana w pliku rejestruj)
czyProxy z funkcje.php, wywoływana w rejestruj.php i na podstawie wyniku
w pliku rejestruj.php zmienna $proxy jest ustawiona na true i użyta w pliku
index.php(zmianna $proxy jest deklarowana/inicjowana w pliku rejestruj)
Zmienna przechowująca stan proxy jest/nie ma w funkcji czyProxy ma inną
nazwę, niż tworzona później i przekazywana zmienna $proxy.
Wnętrze funkcji jest sprawdzane i działa, coś się skopało przy samym
przekazywaniu wyniku zmiennej $proxy.
Nie mam pojęcia co z tym zrobić, restartowałem serwer i system, zmieniałem
nazwę zmienne z proxy na jakaś inne, ale nic nie pomogło. Jakieś rady?
Ledwo żyję :-(
... Wesołych! Ech...