Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP problem z kawałkiem kodu
Forum PHP.pl > Forum > PHP
krzyzaq
Witam,

mam poniższy kawałeczek kodu, który nie bardzo chce robić to czego się po nim spodziewam.
  1. if($nazwaPliku == 'Odbicia' && $nazwaCel == 'baza') // wczytanie do bazy pliku z odbiciami
  2. {
  3. $sciezkaCel = 'D:\\tmp\\HR-TimbrPL\\arch\\';
  4. $plikCel = basename(trim($_FILES['plik']['name']));
  5. move_uploaded_file($_FILES['plik']['tmp_name'], $sciezkaCel.$_FILES['plik']['name']);
  6. $nPliku = $sciezkaCel.$plikCel;
  7. $uruch = 'D:\tmp\HR-TimbrPL\convert\CV.exe -in-det -out-win -q15 -l '. $nPliku;
  8. echo $uruch;
  9. exec($uruch);
  10. $ileL = count(file($nPliku));
  11. $plikA = fopen($nPliku, "r");
  12. for ($i = 1; $i <= count(file($nPliku)); $i++)
  13. {
  14. $data = fgetcsv($plikA, 0, ";");
  15. if(($data[0] != 'NR') && ($data[0] != ""))
  16. {
  17. $this -> impTabTim[$i] = array('NR' => trim($data[0]),'NAZWISKO' => trim($data[1]), 'IMIE' => trim($data[2]), 'CC' => trim($data[3]), 'NRBADGE' => trim($data[4]), 'DATA' => trim($data[5]), 'WE' => trim($data[6]), 'WY' => trim($data[7]), 'CZAS' => trim($data[8]));
  18. }
  19. }
  20. foreach($this -> impTabTim as $lista )
  21. {
  22. echo $lista[1];
  23. if ($lista[1] != "")
  24. {
  25. echo "INSERT INTO TimbrPL.dbo.Dane(ID, NR, NAZWISKO, IMIE, CC, NRZNACZKA, DATA, WEJSCIE, WYJSCIE, CZAS, PLIK) VALUES ('".trim($lista[NR]).trim($lista[DATA]).trim($plikCel)."', '".trim($lista[NR])."', N'".trim($lista[NAZWISKO])."', N'".trim($lista[IMIE])."', '".trim($lista[CC])."', '".trim($lista[NRBADGE])."', '".trim($lista[DATA])."', '".trim($lista[WE])."', '".trim($lista[WY])."', '".trim($lista[CZAS])."', '".trim($plikCel)."')<br />";
  26. //mssql_query("INSERT INTO TimbrPL.dbo.Dane(ID, NR, NAZWISKO, IMIE, CC, NRZNACZKA, DATA, WEJSCIE, WYJSCIE, CZAS, PLIK) VALUES ('".trim($lista[NR]).trim($lista[DATA]).trim($plikCel)."', '".trim($lista[NR])."', N'".trim($lista[NAZWISKO])."', N'".trim($lista[IMIE])."', '".trim($lista[CC])."', '".trim($lista[NRBADGE])."', '".trim($lista[DATA])."', '".trim($lista[WE])."', '".trim($lista[WY])."', '".trim($lista[CZAS])."', '".trim($plikCel)."')");
  27. }
  28. }
  29. }


I teraz problemy:
  1. $uruch = 'D:\tmp\HR-TimbrPL\convert\CV.exe -in-det -out-win -q15 -l '. $nPliku;

1. raczej się nie uruchamia (powinien zmieniać kodowanie znaków w pliku a to sie nie dzieje) - spr składnie w command line i działa bez zarzutu
  1. if ($lista[1] != "")

2. również nie bardzo działa bo gdy jest zakomentowane to pięknie wyświetla całą tablicę niestety wraz z pustymi polami na końcu - natomiast gdy zakomentuje to nie wyświetla nic.

Dzięki za pomoc
Pilsener
Kompletnie nie rozumiem Twojego kodu, co chcesz niby osiągnąć? Wygląda mi to na jakąś próbę wynalezienia rekordowo mało wydajnego sposobu na wczytanie pliku do bazy. Plik do bazy wczytujemy korzystając z instrukcji LOAD DATA INFILE, jeśli wymaga on obróbki to robimy to w taki sposób:
  1. $uchwyt = fopen ("/tmp/inputfile.txt", "r");
  2. if ($uchwyt) {
  3. while (!feof($uchwyt)) {
  4. $linia = rtrim(fgets($uchwyt));
  5. }
  6. fclose ($uchwyt);
- oczywiście zamiast fgets można użyć odpowiedniej funkcji csv. Przetworzony plik tak samo zapisujemy linia po linii i dodajemy w całości do bazy. Robię tak od wielu lat i podejrzewam, że kupa innych ludzi też smile.gif
webdice
Proszę poprawić tytuł, ma on opisywać problem.
krzyzaq
więc zgodnie z sugestią zmieniłem trochę i mam teraz:
  1. if($nazwaPliku == 'Odbicia' && $nazwaCel == 'baza') // wczytanie do bazy pliku z odbiciami
  2. {
  3. $sciezkaCel = 'D:\\tmp\\HR-TimbrPL\\arch\\';
  4. $plikCel = basename(trim($_FILES['plik']['name']));
  5. move_uploaded_file($_FILES['plik']['tmp_name'], $sciezkaCel.$_FILES['plik']['name']); //przenosi wczytany plik z Windows\TEMP do wybranego folderu
  6. $plik = 'D:\\tmp\\HR-TimbrPL\\arch\\'.$_FILES['plik']['name'];
  7.  
  8. $nPliku = $sciezkaCel.$plikCel;
  9. $uruch = 'D:\tmp\HR-TimbrPL\convert\CV.exe -in-det -out-win -q15 -l '. $nPliku;
  10. //echo $uruch;
  11. exec($uruch);
  12.  
  13.  
  14. $uchwyt = fopen ($plik, "r");
  15. if ($uchwyt)
  16. {
  17. while (!feof($uchwyt))
  18. {
  19. $linia = rtrim(fgets($uchwyt));
  20. var_dump($uchwyt);
  21. $liniacsv = fgetcsv($uchwyt, 0, ";");
  22. if ($liniacsv[1] != "")
  23. echo "INSERT INTO TimbrPL.dbo.Dane(ID, NR, NAZWISKO, IMIE, CC, NRZNACZKA, DATA, WEJSCIE, WYJSCIE, CZAS, PLIK) VALUES ('".$liniacsv[5].$liniacsv[1].trim($plikCel)."', '".$liniacsv[0]."', N'".$liniacsv[1]."', N'".$liniacsv[2]."', '".$liniacsv[3]."', '".$liniacsv[4]."', '".$liniacsv[5]."', '".$liniacsv[6]."', '".$liniacsv[7]."', '".$liniacsv[8]."', '".trim($plikCel)."')<br />";
  24. }
  25. }
  26. fclose ($uchwyt);
  27. }


Problem jest z linia 11 - powinien odpalic sie program (gzegzolka) i skonwertowac plik z danej strony kodowej jak ma na windowsowa, zebym mgol pozniej do sql-a dane z polskimi znaczkami wczytac.
Niestety program sie nie uruchamia.
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.