Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Rozpoczynanie operacji od danego wiersza
Forum PHP.pl > Forum > Przedszkole
Woytek950
Witam. Nie mogę sobie poradzić z jednym problemem. Otóż buduję skrypt który będzie na podstawie pliku tekstowego dodawał rekordy w których będą zawarte:
ilość wejść gracza na serwer, zalogowanie się nowego gracza na serwer(jeżeli użytkownik już istnieje to kolumna z ilością wejść się ma aktualizować.).

Niestety to wszystko jest oparte na pliku log serwera. Wykrywanie nowego użytkownika dodałem jak i wykrywanie samej struktury wiersza logu, pozostało mi aktualizowanie ilości wejść na serwer.

Cały skrypt jest nienajlepszym rozwiązaniem bo za każdym razem wczytuje i sprawdza po kolei wszystkie wiersze. A co przy kilkumegowym pliku trwało by to dużo czasu i obciążało by to serwer.

Po krótkim namyśle i przeanalizowaniu wszystkiego doszedłem do wniosku że jeżeli była by funkcja która otwierała by plik tekstowy od $ wiersza to wszystko poszło by z płatka... Lecz nie wiem czy taka funkcja istnieje.

Zapraszam wszystkich do tematu i próby rozwiązania problemu.
Pozdrawiam

Plik logu:
Kod
ScriptLog: New Player maniek id=5431
ScriptLog: New Player aqw id=5433
ScriptLog: KFLRules = kf-bioticslab.KFLevelRules0
ScriptLog: Game length = 2
ScriptLog: UdpServerQuery(crt): Port 7717 successfully bound.
ScriptLog: New Player avgfh id=54325
ScriptLog: New Player avgfh id=54325                     <---- jeżeli skrypt natrafi na taką samą nazwe gracza ma aktualizować wejścia

Plik skryptu: (to co wymodziłem, wszystko na odwal się robione aby działało i proszę się nie czepiać zbytnio tego kodu)
  1. $plik = file('logs.txt');
  2. $ile = count($plik);
  3.  
  4. for($i=0; $i<$ile; $i++)
  5. {
  6. $tab = explode(' ', $plik[$i]);
  7. if($tab[1] == "New")
  8. {
  9. $mysqlQuery = mysql_query("SELECT COUNT(*) FROM gracze WHERE imie='$tab[3]'");
  10. $ilosc = mysql_fetch_row($mysqlQuery);
  11.  
  12. if($ilosc[0] == 0)
  13. {
  14. $uzs = substr($tab[4], 3);
  15. $mysqlQuery1 = mysql_query("INSERT INTO gracze (id, imie, idInGame) VALUES ('', '$tab[3]', '$uzs')");
  16. echo "Dodano nowego uzytkownika: ".$tab[3]."<br />==================</br >";
  17.  
  18. }
  19. /*else{
  20. $mysqlQuery1 = mysql_query("SELECT id FROM gracze WHERE imie='$tab[3]'");
  21. $idgracza = mysql_fetch_assoc($mysqlQuery1);
  22. echo "Aktualizowano graczowi: ".$tab[3]." ilosc wejsc na serwerze. Aktualnie ma:".$idgracza ."<br />==================</br >";
  23.  
  24. }*/
  25. }
  26. }


Jak widzicie stanąłem na tej aktualizacji bo przecież skrypt w nieskończonośc będzie aktualizował bo znajdzie te nazwy uzytowników.
PS. myślałem zeby wszystko wrzucić w cron i co 1 minute aktualizować.
PanGuzol
fseek
Woytek950
@PanGuzol, dzięki za pomoc. Nie miałem pojęcia o takiej funkcji. A wystarczyło krótkie zdanie... tongue.gif


Niestety ale sobie dalej nie poradziłem.
W skrócie: muszę zrobić tak aby skrypt był wykonywany od danej linijki w pliku tekstowym. Czyli powiedzmy ze jest to linijka 450 i skrypt ma sie wykonac od niej. Nastepnie powiedzmy ze doszlo drugie 450 czyli razem 900'tna linijka. I tak od 900'tnej linijki ma teraz dodać tych uzytkownikow...
Fifi209
Nie czytaj przez file tylko otwieraj przez fopen, użyj fseek aby przeskoczyć i na końcu fread
Woytek950
Mógłbyś to w praktyce pokazać? będę wdzięczny.
Fifi209
A przykładów i komentarzy w manualu nie raczył przeczytać?
PanGuzol
Jak nie potrafisz tego zrobić w taki sposób, to spróbuj inny np. jak już odczytasz swoim sposobem, to czyścisz plik i następnym razem czytasz znów całość.
Aby nie stracić logów przed czyszczeniem wykonać możesz kopię. Może nawet jest to i lepsze rozwiązanie bo nie będziesz musiał operować na bardzo dużym pliku w dalszych etapach.
Woytek950
Fajny pomysł. Myślałem nad nim ale nie pomyślałem że można zrobić kopię.
Kolejny raz dziękuje za zainteresowanie.
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.