Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]GD nie wyświetla obrazu
kujol
post 12.02.2019, 09:13:15
Post #1





Grupa: Zarejestrowani
Postów: 324
Pomógł: 27
Dołączył: 21.07.2013

Ostrzeżenie: (0%)
-----


Witam, mam oto taki skrypt, który tworzy mi obraz:

  1. <?Php
  2.  
  3. class Licznik{
  4.  
  5. private $plik;
  6. private $plik2;
  7. private $twojeIp;
  8. private $adresUrl;
  9.  
  10. function LicznikIp(){
  11.  
  12. $this->plik = "ip.txt"; //Plik z adresami ip, jeśli nie istnieje zostanie automatycznie stworzony
  13. $this->plik2 = "stan.txt"; //Plik ze stanem licznika, jeśli nie istnieje zostanie automatycznie stworzony
  14.  
  15. $this->twojeIp = $_SERVER['REMOTE_ADDR']; //Pobiera adres ip
  16. $this->adresUrl = $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; //Pobiera adres strony
  17.  
  18. $this->fp = file_get_contents($this->plik); //Otwiera i czyta plik z adresami ip
  19. $this->explo = explode('|', $this->fp); //Tworzy tablicę adresów ip
  20. $this->zlicz = count($this->explo); //Zlicza ilość tablic - adresów ip
  21.  
  22. if(in_array($this->twojeIp, $this->explo)){ //Sprawdza czy w tablicy istnieje ip
  23. $this->dane = file_get_contents($this->plik2); //Jeśli ip już istnieje odczytuje stan odwiedzin
  24. }
  25.  
  26. else{ //Jeśli w tablicy nie istnieje ip wykonuje skrypt
  27. for($this->i = 0; $this->i < $this->zlicz; $this->i++){ //Wypisuje wszystkie tablice
  28. $this->explo[$this->i];
  29. }
  30.  
  31. $this->explo[] = "$this->twojeIp"; //Dodaje nową tablicę z ip jako ostatnią
  32. $this->noweDane = implode("|",$this->explo); //Łączy tablicę
  33.  
  34. file_put_contents($this->plik, $this->noweDane, LOCK_EX); //Zapisuje zmieniony plik.txt
  35. $this->dane = file_get_contents($this->plik2); //Otwiera i czyta plik ze stanem odwiedzin
  36.  
  37. $this->licznikPlus = $this->dane + 1; //Zwiększa liczbę odwiedzin
  38. file_put_contents($this->plik2, $this->licznikPlus, LOCK_EX); //Zapisuje zmieniony plik.txt
  39.  
  40. header("Location: http://".$this->adresUrl); //Odświerza stronę
  41. }
  42.  
  43. $this->text = "Ilosc odwiedzin: ".$this->dane; //Tekst obrazka
  44. $this->iw = 130; //Szerokość obrazka
  45. $this->ih = 20; //Wysokość obrazka
  46. $this->fs = 2; //Wielkość czcionki "1-5"
  47.  
  48. $this->fw = imagefontwidth($this->fs); //Pobiera szerokość czsionki "$fs" i wzraca wynik w px
  49. $this->l = strlen($this->text); //Zlicza ilość liter w tekście
  50. $this->tw = $this->l * $this->fw; //Oblicza szerokość tekstu
  51. $this->xpos = ($this->iw - $this->tw)/2; //Oblicza przesunięcie tekstu w osi x
  52. $this->fh = imagefontheight($this->fs); //Pobiera wysokość czsionki "$fs" i wzraca wynik w px
  53. $this->ypos = ($this->ih - $this->fh)/2; //Oblicza przesunięcie tekstu w osi y
  54.  
  55. $this->im = imagecreate($this->iw, $this->ih); //Tworzymy pusty obraz
  56. $this->background = imagecolorallocate($this->im, 28, 158, 165); //Kolor tła rgb
  57. $this->textcolor = imagecolorallocate($this->im, 010, 010, 010); //Kolor tekstu rgb
  58. imagestring($this->im, $this->fs, $this->xpos, $this->ypos, $this->text, $this->textcolor); //Rysuje tekst na obrazie
  59.  
  60. header("Content-type: image/png"); //Ustawiamy nagłoek image/png
  61.  
  62. imagepng($this->im); //Wyświetla obraz
  63. imagedestroy($this->im); //Zwalnia pamięć
  64. }
  65. }
  66.  
  67. $licznik = new Licznik;
  68. $licznik->LicznikIp();
  69. ?>
  70.  


Natomiast ten wyświetlam na stronie w następujący sposób:

  1. <img id="footer_img" src="licznik_odwiedzin_ip_class.php" border="1px" alt="Licznik odwiedzin ip"/>


A cały problem tkwi w tym, że na localhost wszystko działa pięknie, a jeśli tylko wrzucę na serwer prv nagle skrypt nie wyświetla obrazka, nie tworzy plików .txt i ich nie czyta.
Czy ktoś wie o co chodzi?

Dodam, że przyklad z manuala także nie działa, czyli problem tkwi gdzieś głębiej. Moja wersja php to 5.2 / 7.0

Ten post edytował kujol 12.02.2019, 09:14:51


--------------------
;)
Go to the top of the page
+Quote Post
nospor
post 12.02.2019, 10:17:25
Post #2





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6289
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kujol
post 12.02.2019, 11:43:04
Post #3





Grupa: Zarejestrowani
Postów: 324
Pomógł: 27
Dołączył: 21.07.2013

Ostrzeżenie: (0%)
-----


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?

Ten post edytował kujol 12.02.2019, 11:43:59


--------------------
;)
Go to the top of the page
+Quote Post
nospor
post 12.02.2019, 13:33:01
Post #4





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6289
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kujol
post 12.02.2019, 19:00:41
Post #5





Grupa: Zarejestrowani
Postów: 324
Pomógł: 27
Dołączył: 21.07.2013

Ostrzeżenie: (0%)
-----


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 biggrin.gif

Ten post edytował kujol 12.02.2019, 19:05:58


--------------------
;)
Go to the top of the page
+Quote Post
nospor
post 12.02.2019, 20:32:33
Post #6





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6289
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 09:07