Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] [csv] Timer, obsługa plików CSV i polskie znaki
Forum PHP.pl > Forum > Przedszkole
viper2000
Witam

Właśnie zaczynam swoją przygodę z PHP więc na początku prosiłbym o nieco wyrozumiałości.

Aktualnie potrzebuje zrobić prosty skrypcik który będzie:
1) odczytywał dane z pliku na CSV (znajdującego się na zdalnym serwerze),
2) odczytanie dane będą przypisane do zmiennych,
3) kilka opercji obliczeniowych i
4) na koniec wyświetlenie końcowego efektu na ekran (a w nieco dalszej przyszłości również zapisanie tych wyników do bazy MySQL)


Aktualnie mój skrypt wygląda następująco:
  1. <?php
  2. class csv extends MySQLi
  3. {
  4. public function import($file)
  5. {
  6. $file=fopen($file, 'r');
  7.  
  8.  
  9.  
  10. while ($row=fgetcsv($file, 1000, ";"))
  11. {
  12.  
  13.  
  14. $Kod= $row[0];
  15. $Stan= $row[1];
  16. .
  17. .
  18. .
  19. $Rok= $row[9];
  20.  
  21.  
  22. echo $Kod , "<BR>";
  23. echo $Stan , "<BR>" ;
  24. .
  25. .
  26. .
  27. echo $Rok , "<BR>" ;
  28.  
  29.  
  30. print "<pre>";
  31. $KOD_2 = $row[6];
  32. $KOD_2 .= "-";
  33. $KOD_2 .= $row[0];
  34. echo $KOD_2;
  35. print "</pre>";
  36. }
  37. }
  38. }
  39.  
  40. ?>


A oto problemy jakie spotkałem na swojej drodze i bardzo prosiłbym o pomoc w ich rozwiązaniu:
1) W chwili obecnej plik CSV wczytuje ręcznie z pliku znajdującego się na dysku lokalnym komputera. Jak zrobić aby plik ten był odczytywany z (obcego) serwera www (do którego mam link)
2) W pliku CSV (po otwarciu go w notatniku) polskie znaki wyświetlają się poprawnie, ale w przeglądarce już nie. Jak zrobić aby w przeglądarce poprawnie wyświetlały się polskie znaki?
3) Jak poprawić ten kod aby odczytywanie plików ZAWSZE zaczynało się od DRUGIEJ linii ? (Pierwsza linia zawiera nagłówki których nie potrzebuje wczytywać gdyż mam odpowiednio nazwane zmienne dzięki czemu wiem jakie dane są pobrane z poszczególnych kolumn pliku CSV)
4) Nie udało mi się w dostępnych materiałach znaleźć informacji na temat tego aby język PHP posiadał coś takiego jak TIMER (znany z innych języków programowania). Jak w związku z tym zmusić skrypt aby pewne działania były wykonywane cyklicznie co godzinę i to bez względu na to co robi użytkownik.


Za pomoc z góry dziękuje.
viking
1. Można zwykłe file_get_contents ale nie wszystkie serwery zezwalają na taki dostęp do zasobów. Łatwiej użyć biblioteki https://github.com/guzzle/guzzle
2. Ustaw prawidłowe nagłówki
3. Zacznij iterować forem od innej linii
3. CRON
viper2000
1) mam nadzieje że na płatnym hostingu w home.pl nie będzie z tym żadnego problemu - w wolnej chwili przetestuje i w razie problemów będę kontynuował ten wątek.
2) Jakie nagłówki?? W pliku csv ? Bo jeśli tak to nie będę w stanie nic z tym zrobić ponieważ docelowo plik ten ma być wczytywany z zewnętrznego serwera www( do którego mam tylko link, a plik jest udostępniony jedynie z prawami do odczytu i pobierania na dysk). Jeśli możesz to rozwiń swoją myśl bo nie bardzo rozumiem w jaki sposób mam ustawić te nagłówki.
3) Aby skorzystać z pętli FOR to potrzebuje (przed rozpoczęciem pętli) znać liczbę wszystkich linii w pliku. Jak w takim układzie odczytać liczbę linii w pliku CSV questionmark.gif
4) Poczytałem sobie o CRON - w tym względzie wszystko wydaje się jasne, mam nadzieje że nie pojawią się problemy gdy zacznę pisać kod :-) A narzazie DZIĘKUJĘ ZA PODPOWIEDŹ
viking
Home to jeden wielki problem więc nie gwarantuję. Artykuł o kodowaniu znaków ze stopki. Pierwszy z brzegu przykład fgetcsv i count.
viper2000
Nieznacznie przerobiłem swoją funkcję oczekując tego iż na moim ekranie wyświetli się aki sam zestaw informacji jak wcześniej oraz dodatkowo ilość linii w pliku csv .
Niestety wyświetla mi się teraz TYLKO ilość linii w pliku CSV , a nie wyświetlają się wartości zapisane w pliku CSV (tak jak by ta pentla FOR w ogóle się nie wykonała)
Możecie powiedzieć mi dlaczego pętla for w ogóle się nie wykonuje ( a bynajmniej nie widzę na ekranie efektów tej pętli), nie ma też żadnych błędów.


Oto nieco zmieniony tekst mojej funkcji:
  1. <?php
  2. class csv extends MySQLi
  3. {
  4. public function import($file)
  5. {
  6. $a=0;
  7. $file=fopen($file, 'r');
  8.  
  9. while ($row=fgetcsv($file, 1000, ";"))
  10. {
  11. $a++;
  12. }
  13. echo "ilość wierszy to: ",$a ;
  14.  
  15. for($licznik=$a; $licznik>1; $licznik--)
  16. {
  17.  
  18. $row= fgetcsv($file, 1000, ";");
  19. $Kod= $row[0];
  20. $Stan= $row[1];
  21. .
  22. .
  23. .
  24. $Rok= $row[9];
  25.  
  26.  
  27. echo $Kod , "<BR>";
  28. echo $Stan , "<BR>" ;
  29. .
  30. .
  31. .
  32. echo $Rok , "<BR>" ;
  33.  
  34.  
  35. print "<pre>";
  36. $KOD_2 = $row[6];
  37. $KOD_2 .= "-";
  38. $KOD_2 .= $row[0];
  39. echo $KOD_2;
  40. print "</pre>";
  41. }
  42. }
  43. }
  44.  
  45. ?>
SmokAnalog
Zrób sobie podstawowy debug - zobacz co masz w $a, a w pętli wypisz sobie $licznik.
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.