Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Przeładowanie pliku
Forum PHP.pl > Forum > PHP
dawidos_95
Witam. Mam mape google i pozycje są zapisywane w pliku. Natomiast przez forum dodaje odpowiednie zmienne do bazy danych i z bazy danych chce te zmienne zapisać w pliku. Więc zrobiłem coś takiego. 1. Czyszczenie pliku; 2. Odczyt z bazy; 3. Zapis tekstu z bazy do pliku; i problem jest taki że zapisuje się tylko jedna najnowsza linijka. Co w tym kodzie jest źle?

  1. //czyszczenie pliku
  2. $plik = fopen("test.txt","w");
  3. fwrite ($plik,$txt);
  4. fclose($plik);
  5.  
  6.  
  7. //zapis zawartości z bazy danych do pliku
  8. $reload_result = dbquery("SELECT * FROM crimemap");
  9. while($reload = dbarray($reload_result))
  10. {
  11. $test ="<markers lat=".$reload['lat']." lng=".$reload['lng']." />";
  12.  
  13. }
  14.  
  15.  
  16. $dane = $test;
  17.  
  18.  
  19.  
  20. $file = "test.txt";
  21. $fp = fopen($file, "a");
  22. flock($fp, 2);
  23. fwrite($fp, $dane);
  24. flock($fp, 3);
  25. fclose($fp);
mstraczkowski
W pętli stosujesz operator porównania zamiast dopisywania.

Zamień = na .=
  1. $test = '';
  2. while ($reload = dbarray($reload_result)) {
  3. $test .= "<markers lat=".$reload['lat']." lng=".$reload['lng']." />";
  4. }


Swoją drogą w przypadku dużej ilości danych powinno się zapisywać linijka po linijce do pliku.
Aby nie zawalić pamięci skryptu
dawidos_95
Dzięki, działa smile.gif

Cytat(mstraczkowski @ 28.04.2013, 19:29:17 ) *
W pętli stosujesz operator porównania zamiast dopisywania.

Zamień = na .=
  1. $test = '';
  2. while ($reload = dbarray($reload_result)) {
  3. $test .= "<markers lat=".$reload['lat']." lng=".$reload['lng']." />";
  4. }


Swoją drogą w przypadku dużej ilości danych powinno się zapisywać linijka po linijce do pliku.
Aby nie zawalić pamięci skryptu


A jak zapisywać to jeden pod drugim tak aby w pliku nie pokazywało dodatkowego znaku?
mstraczkowski
Znak nowej linii PHP_EOL

  1. $test = '';
  2. while ($reload = dbarray($reload_result)) {
  3. $test .= "<markers lat=".$reload['lat']." lng=".$reload['lng']." />".PHP_EOL;
  4. }

Równie dobrze, można użyć na sztywno:

"\r\n" - Windows (CRLF)
"\n" - Unix(LF)
"\r" - Mac (CR)

Stała PHP_EOL poda znak końca linii typowy dla systemu, na którym zainstalowany jest PHP.
dawidos_95
nie działa
mstraczkowski
Czy dobrze zrozumiałem, że chcesz, aby w pliku każda zapisywana linijka była w nowej linii ?
dawidos_95
Dokładnie tak. Każdy nowy <markers> ma być jeden pod drugim
mstraczkowski
A spróbuj w ten sposób:
Jak nie będzie działać to pokaż ponownie swój kod.

  1. $test = '';
  2. while ($reload = dbarray($reload_result)) {
  3. $test .= "<markers lat=".$reload['lat']." lng=".$reload['lng']." />\r\n";
  4. }
dawidos_95
Działa. Dzięki za pomoc smile.gif
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.