Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Zgodność poszczególnych wersji PHP i wyswietlanie błędów
marek71_33
post 29.09.2010, 19:27:24
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 2.02.2010

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


Witam!
Mam taki kod, który liczy ilu użytkowników aktualnie jest online.

  1. $minut = 20;
  2. $teraz = time()+60*$minut;
  3. $bazaip = file("ip.txt");
  4. $ile = count($bazaip);
  5. $ip = $_SERVER["REMOTE_ADDR"];
  6. for ($i=0;$i<$ile;$i++) {
  7. $pol = explode("`",$bazaip[$i]);
  8. if ($pol[2]<time()) {$bazaip[$i]="";}
  9. if ($pol[1]==$ip) {
  10. $bazaip[$i]="`$ip`$teraz`\n"; $jest=1;
  11. }
  12. }
  13. if ($jest<>1) $bazaip[]="`$ip`$teraz`\n";
  14. $f = fopen("ip.txt","w");flock($f,2);
  15. for ($i=0;$i<$ile+1;$i++) {
  16. if ($bazaip[$i]<>"") { fwrite($f, $bazaip[$i]); ($ileip++); }
  17. }
  18. flock($f,3); fclose($f);
  19.  
  20. echo $ileip;


Problem polega na tym, że jeżeli stronę otwieram w php5.1.6 wszystko działa bez problemu, natomiast gdy serwer (WAMP) przełączę na php5.2.9 pojawiają się błędy:
Notice: Undefined variable: ileip in C:\wamp\www\...\index.php on line 526
Notice: Undefined offset: 1 in C:\wamp\www\...\index.php on line 526 / [tutaj linia 16]

  1. if ($bazaip[$i]<>"") { fwrite($f, $bazaip[$i]); ($ileip++);


Co ciekawe na serwerze, na którym mam opublikowaną stronę w necie jest php5.2.13 i nie pokazują się żadne błędy.
Czy ktoś może mi pomóc?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
wookieb
post 29.09.2010, 19:34:26
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Nie chodzi tutaj o wersję PHP tylko o poziom raportowania błędów php.net/error_reporting
Jak to rozwiązać? Zawsze definiuj zmienne przed użyciem.


--------------------
Go to the top of the page
+Quote Post
Wicepsik
post 29.09.2010, 19:34:53
Post #3





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

Ostrzeżenie: (20%)
X----


Na początku skryptu dodaj $ileip = 0;


--------------------
Go to the top of the page
+Quote Post
marek71_33
post 29.09.2010, 19:43:03
Post #4





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 2.02.2010

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


Zrobiłem zmiany:

  1. $minut = 20;
  2. $teraz = time()+60*$minut;
  3. $bazaip = file("ip.txt");
  4. $ile = count($bazaip);
  5. $ip = $_SERVER["REMOTE_ADDR"];
  6. $ileip=0;
  7. for ($i=0;$i<$ile;$i++) {
  8. $pol = explode("`",$bazaip[$i]);
  9. if ($pol[2]<time()) {$bazaip[$i]="";}
  10. if ($pol[1]==$ip) {
  11. $bazaip[$i]="`$ip`$teraz`\n"; $jest=1;
  12. }
  13. }
  14. if ($jest<>1) $bazaip[]="`$ip`$teraz`\n";
  15. $f = fopen("ip.txt","w");flock($f,2);
  16. for ($i=0;$i<$ile+1;$i++) {
  17. if (isset($bazaip[$i])<>"") { fwrite($f, $bazaip[$i]); ($ileip++); }
  18. }
  19. flock($f,3); fclose($f);
  20.  
  21. $online_label->SetValue($ileip);


i działa bez błędów.
Tylko nie jestem pewny tego isset(). Czy to jest dobrze czy można (trzeba) zrobić to inaczej?
Go to the top of the page
+Quote Post
wookieb
post 29.09.2010, 19:51:30
Post #5





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Jeżeli chcesz sprawdzić czy klucz istnieje oraz czy jest jakaś wartość pod tym kluczem powinieneś użyc formułki
  1. if (isset($bazaip[$i]) && $bazaip[$i])


Ale lepsza jest krótsza wersja
  1. if (!empty($bazaip[$i]))


--------------------
Go to the top of the page
+Quote Post
marek71_33
post 29.09.2010, 19:57:10
Post #6





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 2.02.2010

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


Już działa, dzięki wszystkim za pomoc
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: 19.07.2025 - 20:54