Witam, mam oto taki skrypt, który tworzy mi obraz:
<?Php class Licznik{ private $plik; private $plik2; private $twojeIp; private $adresUrl; function LicznikIp(){ $this->plik = "ip.txt"; //Plik z adresami ip, jeśli nie istnieje zostanie automatycznie stworzony $this->plik2 = "stan.txt"; //Plik ze stanem licznika, jeśli nie istnieje zostanie automatycznie stworzony $this->twojeIp = $_SERVER['REMOTE_ADDR']; //Pobiera adres ip $this->adresUrl = $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; //Pobiera adres strony $this->fp = http://www.php.net/file_get_contents($this->plik); //Otwiera i czyta plik z adresami ip $this->explo = http://www.php.net/explode('|', $this->fp); //Tworzy tablicę adresów ip $this->zlicz = http://www.php.net/count($this->explo); //Zlicza ilość tablic - adresów ip if(http://www.php.net/in_array($this->twojeIp, $this->explo)){ //Sprawdza czy w tablicy istnieje ip $this->dane = http://www.php.net/file_get_contents($this->plik2); //Jeśli ip już istnieje odczytuje stan odwiedzin } else{ //Jeśli w tablicy nie istnieje ip wykonuje skrypt for($this->i = 0; $this->i < $this->zlicz; $this->i++){ //Wypisuje wszystkie tablice $this->explo[$this->i]; } $this->explo[] = "$this->twojeIp"; //Dodaje nową tablicę z ip jako ostatnią $this->noweDane = http://www.php.net/implode("|",$this->explo); //Łączy tablicę file_put_contents($this->plik, $this->noweDane, LOCK_EX); //Zapisuje zmieniony plik.txt $this->dane = http://www.php.net/file_get_contents($this->plik2); //Otwiera i czyta plik ze stanem odwiedzin $this->licznikPlus = $this->dane + 1; //Zwiększa liczbę odwiedzin file_put_contents($this->plik2, $this->licznikPlus, LOCK_EX); //Zapisuje zmieniony plik.txt http://www.php.net/header("Location: http://".$this->adresUrl); //Odświerza stronę } $this->text = "Ilosc odwiedzin: ".$this->dane; //Tekst obrazka $this->iw = 130; //Szerokość obrazka $this->ih = 20; //Wysokość obrazka $this->fs = 2; //Wielkość czcionki "1-5" $this->fw = imagefontwidth($this->fs); //Pobiera szerokość czsionki "$fs" i wzraca wynik w px $this->l = http://www.php.net/strlen($this->text); //Zlicza ilość liter w tekście $this->tw = $this->l * $this->fw; //Oblicza szerokość tekstu $this->xpos = ($this->iw - $this->tw)/2; //Oblicza przesunięcie tekstu w osi x $this->fh = imagefontheight($this->fs); //Pobiera wysokość czsionki "$fs" i wzraca wynik w px $this->ypos = ($this->ih - $this->fh)/2; //Oblicza przesunięcie tekstu w osi y $this->im = imagecreate($this->iw, $this->ih); //Tworzymy pusty obraz $this->background = imagecolorallocate($this->im, 28, 158, 165); //Kolor tła rgb $this->textcolor = imagecolorallocate($this->im, 010, 010, 010); //Kolor tekstu rgb imagestring($this->im, $this->fs, $this->xpos, $this->ypos, $this->text, $this->textcolor); //Rysuje tekst na obrazie http://www.php.net/header("Content-type: image/png"); //Ustawiamy nagłoek image/png imagepng($this->im); //Wyświetla obraz imagedestroy($this->im); //Zwalnia pamięć } } $licznik = new Licznik; $licznik->LicznikIp(); ?>
<http://december.com/html/4/element/img.html id="footer_img" src="licznik_odwiedzin_ip_class.php" border="1px" alt="Licznik odwiedzin ip"/>
Odpal ten skrypt licznik_odwiedzin_ip_class.php bezposrednio w przegladarce i sprawdz co zwraca
ps:
header("Location: http://".$this->adresUrl); //Odświerza stronę
odswiezanie strony w skrypciku generujacym obrazek to chyba nie teges...
A wiec po odpaleniu bezpośrednio wywala błąd, że strona nie dziala, bo spowodowała zbyt wiele przekierowań, nawet jeśli usunę header().
Odświeżyć muszę w przypadku, jeśli ip jeszcze nie istnieje, edytuje plik txt, zapisuje i odświeżam. Kolejny raz paser nie powinien już dojść do tego, bo wykonuje zapytanie if, które powinno być poprawne. W przypadku nowego ip leci do else.
Sam skrypt generyjacy obrazek jest po za if, czy else.
Problem na obecną chwilę rozwiązałem tak, że skrypt wrzuciłem na inny serwer - cba.pl i wszystko działa pięknie bez najmniejszego zarzutu, lecz gryzie mnie myśl dlaczego prv.pl tego nie obsługuje?
1) Daj
die('Ala ma kota');
na poczatku tego skryptu co by miec pewnosc ze sie odpala a nie ze masz przekierowania z innego powodu
2) Jesli sie pojawil ten napis, to znaczy ze nie usunales tego przekierowania co niby usunales
3) Naprawde nie musisz robic przekierowania by odswiezyc liste IP... Masz to zle zrobione teraz
4)
$this->1
$this->2
$this->3.
.......
$this->1000000
Powaznie? Przeciez zadna ale to zadna z twoich $this->..... nie jest tam potrzebna. To wszystko powinny byc zmienne lokalne. Super, ze bawisz sie w klasy, ale moze poczytaj wpierw jakies podstawy bo uzywanie klas naprawde nie polega na ciaglym $this->zmienna
1) Skrypt odpala i generuje obraz, ale problem jest taki, że nie tworzy plików .txt i ich nie czyta nawet gdy wrzucę je przez ftp
3) No w sumie racja, chociaż to nie powinno mieć większego znaczenia
4) Możesz podać jakiś przykład klasy i wytłumaczyć mi w sposób łopatologiczny kiedy używać $this->?
Najlepiej by było, gdybyś mógł pokazać jak powinna wyglądać prawidłowo moja klasa powyżej według Ciebie, ale oczywiście tylko proszę, nie wymagam
Twoja klasa na chwile obecna to poptostu zwykla funkcja opakowana w klase. Kazdy tak pewnie robil na poczatku. Tak czy siak za bardzo nie mam czasu by to wszystko ci przerabiac. Popraw na chwile obecna te zmienne, czyli wszystkie wystapienia
$this->zmienna
zamien poprostu na
$zmienna
Co do tworzenia/czytania plikow to skoro sie to nie robi to zapewne gdzies w logach masz napisane bledy czemu tak sie dzieje
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)