![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 1.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Potrzebowalem napisac skrypt ktory dane wyeksportowane z programu kontroli godzin pracy odpowiednio przetworzy i wyswietli informacje ze w wybranym dniu o wybranej godzinie bylo tylu a tylu pracownikow. I tutaj mam pewien problem skrypt dziala i strona sie ladnie generuje ale odczyt z pliku trwa okolo 4sekund (cala strona generuje sie w 4,5s) format pliku wejsciowego to csv: Kod 00002;09;01;01;06;01;1 00090;09;01;01;18;37;0 ... plik wczytuje poprzez: Kod ... $pliczek=file("lista.csv"); foreach($pliczek as $test){ ... czy mozna w jakis sposob przyspieszyc wczytywanie pliku -zastapic funkcje file() czy moze lepiej skozystac z bazy? PS: plik jest tylko odczytywany. przy aktualizacji danych caly jest zastepowany nowym. Niemam duzego doswiadczenia w PHP |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
A ile jest w nim linijek?
Możesz spróbować użycia innych funkcji typu fopen + fgetcsv -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 461 Pomógł: 32 Dołączył: 17.09.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Rozwiązanie całkiem błędne - najpierw wczytujesz plik do pamięci tworząc z niego tablicę a potem iteracja po każdym wierszu. Wczytuje linia po linii i uzyskasz lepszy efekt.
To na szybko co możesz zrobić. Aby powiedzieć co dalej masz źle musisz pokazać resztę kodu |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 1.10.2009 Ostrzeżenie: (0%) ![]() ![]() |
Wczytywanie linijka po linijce jest wolniejsze o ok 0,4s.
dane sa wczytane z pliku csv i odfiltrowane na podstawie daty i czasu. pozycje ktore spelniaja warunek (odpowiednia data i czas) sa zliczone i wyswietlone. Jesli mozna to zrobic w jakis madrzejszy sposob to prosze o rade. dodam jeszcze ze niejest to hosting tylko apache i php na slabszym PC postawione. predkosc sortowania itd jest ok tylko czas ladowania z pliku chcialbym obciac... (plik aktualnie 2100kb) Kod if (file_exists("lista\aktu.txt")) { // jesli aktualizuje liste to: exit("aktualizuje baze danych... prosze chwile poczekac i sprobowac ponownie <br />"); } $ile_osob = 0; $ile_biuro = 0; $ile_tech = 0; $ile_mag_drv= 0; $stan_rok = $_REQUEST["rok"]; $stan_mies = $_REQUEST["miesiac"]; $stan_dzien= $_REQUEST["dzien"]; $stan_godz = $_REQUEST["godzina"]; $stan_minuta=$_REQUEST["minuta"]; $lista=array(); // ScriptTimer::timing_milestone('czytam plik'); $pliczek=file("lista\bibi_eksport.txt"); // czytaj do tablicy foreach($pliczek as $test){ // kazdy element $kawalki=explode(';',$test); $os_nr=$kawalki[0]; $os_data_rok=$kawalki[1]; if($os_data_rok!=$stan_rok){ // jak data zla to nastepny element continue; } $os_data_miesiac=$kawalki[2]; if($os_data_miesiac!=$stan_mies){ continue; } $os_data_dzien=$kawalki[3]; if($os_data_dzien!=$stan_dzien){ continue; } $os_godz_godz=$kawalki[4]; $os_godz_minuta=$kawalki[5]; if((int)$kawalki[6]==0){ // jesli data ok to godziny do tablic $sprawdzam_in[$os_nr]=array("godz_in"=>$os_godz_godz,"min_in"=>$os_godz_minuta); }else{ $sprawdzam_out[$os_nr]=array("godz_out"=>$os_godz_godz,"min_out"=>$os_godz_minuta); }; array_push($lista,$os_nr); // dodaj pozycje } // ScriptTimer::timing_milestone('plik wczytany'); $lista=array_unique($lista); // posortuj i wyrzuc powtarzajace sie sort($lista); foreach($lista as $i){ // dla zostawionych elementow if($sprawdzam_in[$i]["godz_in"]<=$sprawdzam_out[$i]["godz_out"]){ // jesli dzien to posortuj if(spr_in($sprawdzam_in[$i]["godz_in"],$sprawdzam_in[$i]["min_in"],$stan_godz,$stan_minuta)){ if(spr_out($sprawdzam_out[$i]["godz_out"],$sprawdzam_out[$i]["min_out"],$stan_godz,$stan_minuta)){ if(w_liscie($li_biurowiec,$i)){ // wylap biurowych $ile_biuro++; }else{ if(w_liscie($li_tech,$i)){ // wylap technicznych $ile_tech++; }else{ if(w_liscie($li_mag_drv,$i)){ // wylap magaynierow i kierowcow $ile_mag_drv++; }else{ $ile_osob++; // reszta } } } } } }else{ // jesli noc to posortuj if(spr_in($sprawdzam_in[$i]["godz_in"],$sprawdzam_in[$i]["min_in"],$stan_godz,$stan_minuta)){ if(w_liscie($li_biurowiec,$i)){ $ile_biuro++; }else{ if(w_liscie($li_tech,$i)){ $ile_tech++; }else{ if(w_liscie($li_mag_drv,$i)){ $ile_mag_drv++; }else{ $ile_osob++; } } } } if(spr_out($sprawdzam_out[$i]["godz_out"],$sprawdzam_out[$i]["min_out"],$stan_godz,$stan_minuta)){ if(w_liscie($li_biurowiec,$i)){ $ile_biuro++; }else{ if(w_liscie($li_tech,$i)){ $ile_tech++; }else{ if(w_liscie($li_mag_drv,$i)){ $ile_mag_drv++; }else{ $ile_osob++; } } } } } } oraz uzyte "funkcje" Kod function spr_in($in_h,$in_m,$set_h,$set_m){
if($in_h<$set_h){ return TRUE; } if($in_h==$set_h){ if($in_m<=$set_m) return TRUE; } return FALSE; } function spr_out($out_h,$out_m,$set_h,$set_m){ if($out_h>$set_h){ return TRUE; } if($out_h==$set_h){ if($out_m>$set_m) return TRUE; } return FALSE; } function w_liscie($list,$nr){ foreach($list as $i){ if($i==$nr) return TRUE; } return FALSE; } |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 461 Pomógł: 32 Dołączył: 17.09.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Hej,
normalnie nie robię za kogoś gotowych skryptów - ale połechtałeś moją próżność. Wieczorem jak wrócę z pracy to się przyjrzę temu i spróbuję znaleźć jak najwięcej możliwych miejsc gdzie można przyśpieszyć. Pozdrawiam |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 04:28 |