Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] Usuwanie linii z pliku txt
kadet
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 16.02.2008

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


Witam.
Nie jestem żadnym specem od php, potrzebuje napisać pewien skrypt i go napisałem ale wydaje mi się on bardzo nieoptymalny.
Otóż problem wygląda tak: posiadam plik dane.txt z indeksami produktów, który ma następujący format:
Kod
60
62
63
64
65
67
72
77
78
.
.
.

I tak łącznie ok. 20 tysięcy linii.
Potrzebuję coś z tym zrobić, ale że serwer nie pozwoli na wykonywanie skryptu przez wiele godzin, więc wpadłem na następujący pomysł. Co 5 minut uruchamiany jest ten skrypt (z crona) pobierający za każdym razem po 5 indeksów
Oto moje wypociny:
  1. <?php
  2. $fp1 = fopen('index.txt', 'r');
  3. $nr = fgets($fp1, 10);
  4. $koniec = $nr + 5;
  5. fclose($fp1);
  6. $fp2 = fopen('index.txt', 'w');
  7. fwrite($fp2, $koniec);
  8. fclose($fp2);
  9. $fp = fopen('dane.txt', 'r'); // otwarcie pliku tylko do odczytu ("r")
  10. flock($fp, 1); // blokowanie pliku do odczytu
  11. $i = 0;
  12. while(!feof($fp) && $i < $nr) { // do póki nie ma końca pliku lub nie ma odpowiedniej linii
  13. $linia = fgets($fp, 10);
  14. $i++; // podwyższenie zmiennej $i o jeden
  15. }
  16. for ($nr; $nr < $koniec; $nr++) {
  17.  $linia = fgets($fp, 10); // pobranie jednej linii do zmiennej $linia
  18.  echo $linia . "<br>";
  19.  }
  20. flock($fp, 3); // odblokowanie pliku
  21. fclose($fp); // zamknięcie pliku
  22. ?>

Działa dokładnie tak jak tego oczekuję. O ile przy początkowych liniach wszystko jest OK, to np. przy końcowych liniach, przy każdym wywołaniu skryptu trzeba przeczytać wszystkie linie aby dojść do tej właściwej. Według mnie to mało optymalne. Próbowałem szukać informacji o tym jak lepiej można by to zrobić. Jedyne co znalazłem to wczytywanie całego pliku do tablicy, operacje na niej i zapisanie jej spowrotem do pliku. Ale to jest chyba jeszcze mniej optymalne (o ile odczyt zajmowałby tyle samo to w rozwiązaniu z tablicą dochodzi jeszcze zapis). Chodzi mi o to, żeby przy każdym wywołaniu skryptu, odczytywane były pierwsze 5 wierszy i od razu usuwane, jednak beż użycia tablicy do tego.
Z góry dziękuję za wszelkie podpowiedzi, ewentualnie uwagi co zrobiłem źle w podanym skrypcie.
Pozdrawiam
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 18.09.2025 - 04:16