Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PHP problem z kawałkiem kodu
krzyzaq
post
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 4.09.2008

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


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
Go to the top of the page
+Quote Post
Pilsener
post
Post #2





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

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


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
Go to the top of the page
+Quote Post
webdice
post
Post #3


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Proszę poprawić tytuł, ma on opisywać problem.
Go to the top of the page
+Quote Post
krzyzaq
post
Post #4





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 4.09.2008

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


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.
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: 21.08.2025 - 16:45