Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Parsowanie bardzo dużych plików
dado
post
Post #1





Grupa: Zarejestrowani
Postów: 194
Pomógł: 2
Dołączył: 12.04.2004
Skąd: Częstochowa

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


chciałem zapytać bardziej rozeznanych w temacie - mam do parsowania pliki txt po 600/1000 MB. W tym momencie stosuję funkcje file i substr ale przy tak dużych plikach php wymięka, time limit na długie godziny memory limit ile sie da czyli 2 gb. Miał ktoś może z was podobny problem ?
Będę wdzięczny za każdy pomysł.
Go to the top of the page
+Quote Post
pyro
post
Post #2





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Cytat(dado @ 27.03.2008, 22:57:22 ) *
chciałem zapytać bardziej rozeznanych w temacie - mam do parsowania pliki txt po 600/1000 MB. W tym momencie stosuję funkcje file i substr ale przy tak dużych plikach php wymięka, time limit na długie godziny memory limit ile sie da czyli 2 gb. Miał ktoś może z was podobny problem ?
Będę wdzięczny za każdy pomysł.


użyj set_time_limit();


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #3





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Co konkretnie oznacza , że "wymięka"?


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


OMG, przeciez file laduje od razu caly plik do pamieci to nic dziwnego ze sie wlecze.

uzyj fopen() + fread() + innych operujacych na strumieniu, bo czytaja plik po fragmencie i nie trzymaja calej jego zawartosci w pamieci


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
dado
post
Post #5





Grupa: Zarejestrowani
Postów: 194
Pomógł: 2
Dołączył: 12.04.2004
Skąd: Częstochowa

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


Wymięka to akurat w tym przypadku oznacza powieszenie komputera (localhost). set_time_limit() - już na 2h.
Jasne że pobieranie strumieniowe jest bardziejsze w tym przypadku tylko nie jak je zrealizować.
Przykładowe dane wyglądają tak
Kod
001369825grecja   0125granada    025***hotel piersonada025 456875 45357 00 21 35 0000 554
001369825grecja   0125granada    025***hotel piersonada025 456875 45357 00 21 35 0000 554
001369825grecja   0125granada    025***hotel piersonada025 456875 45357 00 21 35 0000 554
001369825grecja   0125granada    025***hotel piersonada025 456875 45357 00 21 35 0000 554
001369825grecja   0125granada    025***hotel piersonada025 456875 45357 00 21 35 0000 554
...


i teraz muszę pobrać zawsze pełną paczkę danych czyli kończąca się enterem
czyli jeśli wiem że wiersz ma np: 47bajtów to

  1. <?php
  2. $start = 0; 
  3. $pakiet=47; 
  4. $liczbawierszy=300000;
  5. $paczka = file_get_contents("1000mb.csv", FALSE, NULL, $start, ($pakiet * $liczbawierszy) );
  6. ?>

to mocno uproszczone ale czy to dobre myślenie ?
Go to the top of the page
+Quote Post
Pilsener
post
Post #6





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


pl.php.net/manual/pl/function.fgets.php
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


W ogole wyglada to jak CSV, i masz do tego masz funkcyjke fgetcsv czy jakos tak, i nie file_get_contents!!! RTFM, on przeciez tez wszystko od razu wczytuje do pamieci.


--------------------
Nie lubię jednorożców.
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 Aktualny czas: 20.08.2025 - 14:03