![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 74 Pomógł: 0 Dołączył: 30.08.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Próbuję napisać skrypt do usuwania z pliku wielu linii na raz. Przerobiłem skrypt do usuwania jednej linii, ale strasznie obciąża serwer i czasami wyskakuje błąd o wykorzystaniu limitu czasu. Czy da się to wykonać szybciej, tak aby nie wyskakiwał błąd? Oto mój skrypt (usuwa 269 linii od góry licząc): Cytat <?PHP
$start = 0; $koniec = 269; do { $toDelete = 0; $lines = file('strona.html'); unset($lines[$toDelete]); file_put_contents('strona.html', $lines); $start ++; } while ($start != $koniec); ?> -------------------- Procesor: 2,4 GHz Dysk: 180 GB Ramy: 1538 MB Grafika: GeForce 256 MB |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 875 Pomógł: 122 Dołączył: 2.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
A błąd polegał na tym że za każdą iteracją pętli wczytywałeś plik do tablicy na której potem robiłeś operację i z powrotem zapisywałeś plik... i tak 269 razy... operacje odczytu i zapisu do pliku są jednymi z najwolniejszych w PHP... w zasadzie wystarczyłoby przesunąć wczytanie pliku do tablicy przed pętlę... w samej pętli operować na tej jednej tablicy i zapisać już na końcu, po skończeniu pętli... Ten post edytował nowotny 29.07.2008, 20:20:17 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 74 Pomógł: 0 Dołączył: 30.08.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki, teraz operację wykonuje błyskawicznie :-).
Jeszcze jeden problemik, jak zostawić kilka linii bez naruszenia? Tzn. chciałbym jeszcze usunąć linie z końca pliku, tak aby zostały te które mnie interesują. Wcześniej skrypt wyglądał tak (pozostawiał 16 linii), ale działał tylko przy małej ilości linii: Cytat <?PHP
$start = 0; $koniec = 269; $koniec2 = 268; do { $toDelete = 0; $lines = file('strona.html'); unset($lines[$toDelete]); file_put_contents('strona.html', $lines); $start ++; } while ($start != $koniec); do { $toDelete = 16; $lines = file('strona.html'); unset($lines[$toDelete]); file_put_contents('strona.html', $lines); $start ++; } while ($start != $koniec2); ?> Ten post edytował Tomek58 29.07.2008, 20:26:20 -------------------- Procesor: 2,4 GHz Dysk: 180 GB Ramy: 1538 MB Grafika: GeForce 256 MB |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 875 Pomógł: 122 Dołączył: 2.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Tak samo... poczytaj sobie manual o array_slice" title="Zobacz w manualu PHP" target="_manual i wszystko będziesz wiedział...
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 74 Pomógł: 0 Dołączył: 30.08.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki, załapałem o co chodzi :-).
A więc gotowy skrypt wygląda tak (zachowa 16 linii począwszy od 269): Cytat <?PHP
$lines = file('strona.html'); $output = array_slice($lines, 269); file_put_contents('strona.html', $output); $lines = file('strona.html'); $output = array_slice($lines, 0, 16); file_put_contents('strona.html', $output); ?> -------------------- Procesor: 2,4 GHz Dysk: 180 GB Ramy: 1538 MB Grafika: GeForce 256 MB |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 10:25 |