Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Zgodność poszczególnych wersji PHP i wyswietlanie błędów
Forum PHP.pl > Forum > Przedszkole
marek71_33
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?
wookieb
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.
Wicepsik
Na początku skryptu dodaj $ileip = 0;
marek71_33
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?
wookieb
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]))
marek71_33
Już działa, dzięki wszystkim za pomoc
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.