Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][XML][inne] brak zapisu do pliku
Forum PHP.pl > Forum > Przedszkole
Wime
Witam.

Mam problem z zapisem danych z xml przetworzonych przez simplexml. O ile samo odczytanie xml'a nie stanowi problemu to już zapis do logu.txt tak...
  1. <?php
  2. $dzisiaj = date("Y-m-d G:i:s");
  3.  
  4. function zapisz() {
  5. $dane = "$dzisiaj;$foo->id;$foo->frequency;$foo->power;$foo->capacitance\n";
  6. $file = "zrzuty/log.txt";
  7. $fp = fopen($file, "a");
  8. flock($fp, 2);
  9. fwrite($fp, $dane);
  10. flock($fp, 3);
  11. fclose($fp);
  12. }
  13.  
  14. $xml = simplexml_load_file('odczyty/001.xml');
  15. foreach ($xml->meter as $foo)
  16. zapisz();
  17. $xml = simplexml_load_file('odczyty/015.xml');
  18. foreach ($xml->meter as $foo)
  19. zapisz();
  20. $xml = simplexml_load_file('odczyty/065.xml');
  21. foreach ($xml->meter as $foo)
  22. zapisz();
  23. ?>


plik xml:
  1. <!-- XML API v0.2 -->
  2. -
  3. <Strofoss>
  4. <meter>
  5. <id>001</id>
  6. <frequency>56.766</frequency>
  7. <power>227.653</power>
  8. <capacitance>15.233</capacitance>
  9. </meter>
  10. </Strofoss>


Chciałem sobie trochę ułatwić życie dlatego wyodrębniłem do function zapisz() powtarzalne procedury, ale w logach zaczęło się pojawiać tylko takie coś:
Kod
;;;;


jak pod każdym odczytaniem xml'a było to co w zapisz() log wyglądał prawidłowo.
Kod
2010-11-15 7:40:00;001;56.766;227.653;15.233

konrados
zapomniałeś przekazać foo:

  1. function zapisz($foo) {
  2. global $dzisiaj;
  3. $dane = "$dzisiaj;$foo->id;$foo->frequency;$foo->power;$foo->capacitance\n";
  4. $file = "zrzuty/log.txt";
  5. $fp = fopen($file, "a");
  6. flock($fp, 2);
  7. fwrite($fp, $dane);
  8. flock($fp, 3);
  9. fclose($fp);
  10. }
  11.  
  12. $xml = simplexml_load_file('odczyty/001.xml');
  13. foreach ($xml->meter as $foo)
  14. zapisz($foo);
  15. //...
Wime
yahoo.gif

działa, dziękuje!

EDIT.

jeszcze jedno. trochę zmodyfikowałem:

  1. <?php
  2. $czas = date("Y-m-d G:i:s");
  3.  
  4. function zapisz($foo) {
  5. global $dzisiaj;
  6. $dane = "$czas;$foo->id;$foo->frequency;$foo->power;$foo->capacitance\n";
  7. $file = "zrzuty/".$id.".txt";
  8. $fp = fopen($file, "a");
  9. flock($fp, 2);
  10. fwrite($fp, $dane);
  11. flock($fp, 3);
  12. fclose($fp);
  13. }
  14. function link($id) {
  15. $fileName = "odczyty/".$id.".xml";
  16. $filePath = $fileName;
  17. $xml = simplexml_load_file($filePath);
  18. foreach ($xml->user as $foo)
  19. {
  20. zapisz($foo);
  21. }
  22. }
  23.  
  24. $id = 001;
  25. link($id);
  26.  
  27. $id = 015;
  28. link($id);
  29. ?>

odczytuje pliki ale zapisuje do jednego ".txt", coś nie tak mam z linijką:
  1. $file = "zrzuty/".$id.".txt";


i utknąłem w punkcie...
konrados
No ten sam problem co ostatnio - używasz zmiennej $id ale jej nie przekazujesz do funkcji.
W ciele funkcji widoczne są tylko zmienne zadeklarowane w tym ciele, lub zmienne globalne, lub - zmienne przekazane w parametrze, no ale musisz je przekazać, np:

  1. function zapisz($foo,$id)


a potem:

  1. zapisz($foo,$id);


Poza tym ten fragment:

  1. $id = 001;


spowoduje, że w $id wyląduje 1 (bez zer). Jak chcesz żeby wylądowało 001 to użyj "".
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.