Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Problem z zapisem adresu IP do pliku
Krastley
post 26.07.2012, 18:27:31
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 22.12.2010

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


Mam taką funkcję:

  1. public static function uniquereader($counter_file) {
  2.  
  3. $user_addr = $_SERVER['REMOTE_ADDR'];
  4.  
  5. if (!is_file($counter_file)) {
  6. $counter_file_stream = fopen($counter_file, 'wb');
  7. fwrite($counter_file_stream, $user_addr);
  8. fclose($counter_file_stream);
  9. }
  10.  
  11. if (!strpos(file_get_contents($counter_file), $user_addr)) {
  12. $counter_file_stream = fopen($counter_file, 'r+b');
  13. fseek($counter_file_stream, -1, SEEK_END);
  14. fwrite($counter_file_stream, "\n".$user_addr);
  15. fclose($counter_file_stream);
  16. }
  17.  
  18. $counter = sizeof(file($counter_file));
  19.  
  20. return $counter;
  21. }


Jak widać, jeżeli nie ma pliku na serwerze, powinien zostać utworzony, a w nim powinien zostać zapisany adres IP. Ale kiedy plik jest tworzony po raz pierwszy, znajduje się w nim coś takiego:


127.0.0.
127.0.0.1


i funkcja zwraca wartość 2. Czy ktoś może mi powiedzieć, dlaczego?
Go to the top of the page
+Quote Post
!*!
post 26.07.2012, 19:34:55
Post #2





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


  1. function ipFile($file)
  2. {
  3. $user_addr = $_SERVER['REMOTE_ADDR'];
  4.  
  5. if(!file_exists($file))
  6. {
  7. file_put_contents($file, $user_addr."\n", FILE_APPEND | LOCK_EX);
  8. return count(file($file));
  9. }
  10.  
  11. if(!stristr(file_get_contents($file), $user_addr))
  12. {
  13. file_put_contents($file, $user_addr."\n", FILE_APPEND | LOCK_EX);
  14. return count(file($file));
  15. }
  16. return count(file($file));
  17. }

Zwraca 2, ponieważ są 2 linijki.

Ten post edytował !*! 26.07.2012, 19:35:32


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Krastley
post 26.07.2012, 20:33:26
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 22.12.2010

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


Dzięki za kod smile.gif O wiele lepiej to wygląda i działa bez zarzutu.

Trochę źle sformułowałem pytanie. Dlaczego moja funkcja ucina pierwszy adres i zapisuje 127.0.0.? Teoretycznie wydaje mi się, że powinno być dobrze i nie bardzo rozumiem, dlaczego nie jest smile.gif

OK, przypuszczam, że to kwestia LOCK_EX.

Ten post edytował Krastley 26.07.2012, 21:58:02
Go to the top of the page
+Quote Post
!*!
post 27.07.2012, 09:10:20
Post #4





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


  1. fseek($counter_file_stream, -1, SEEK_END);

A to nie jest tak że tworzysz plik zapisujesz 127.0.0.1 po czym sprawdzasz czy występuje i ustawiasz znacznik na -1, dlatego ucina i zapisuje kolejne. LOCK_EX jest od czego innego, poczytaj w manualu, bo może się okazać że będzie to dla Ciebie zbędne.

Ten post edytował !*! 27.07.2012, 09:11:11


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Krastley
post 27.07.2012, 10:22:00
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 22.12.2010

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


Jest dokładnie tak, jak napisałeś. W manualu znalazłem coś takiego:

"To move to a position before the end-of-file, you need to pass a negative value in offset and set whence to SEEK_END."

To mnie zmyliło, myślałem, że negatywny offset i SEEK_END przeniosą mnie na koniec pliku, ale źle to zrozumiałem.

Wielkie dzięki 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: 18.06.2025 - 21:01