Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: IniParser
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
Levabul
Klasa służąca do pobierania i zapisywania opcji w pliku INI. Komentarze bardzo mile widziane biggrin.gif. Całość udostępniana na licencji Creative Common 2.0

  1. <?php
  2.  
  3. /**
  4.  * (c) Copyright by Sławek 'Levabul' Pruchnik
  5.  *
  6.  * @author Sławek 'Levabul' Pruchnik
  7.  * @copyright Sławek 'Levabul' Pruchnik  2006
  8.  * @license <a href="http://creativecommons.org/licenses/by-nc-sa/2.0/" target="_blank">http://creativecommons.org/licenses/by-nc-sa/2.0/</a>
  9.  * @version 0.9
  10.  */
  11.  
  12. class IniParser {
  13.  
  14. /**
  15. * Przechowuje sciezke do pliku
  16. *
  17. * @var string
  18. * @access private
  19. */
  20.  
  21. private $handle;
  22.  
  23. /**
  24. * Przechowuje sparsowany plik ini
  25. *
  26. * @var array
  27. * @access private
  28. */
  29.  
  30. private $ini;
  31.  
  32. /**
  33. * Okresla czy plik podczas wykonywania metody __destruct() ma zostac zapisany
  34. *
  35. * @var bool
  36. * @access private
  37. */
  38.  
  39. private $save = 0;
  40.  
  41. /**
  42. * Okresla czy podczas wykonywania metody __destruct() ma zostac utworzony cache pliku
  43. *
  44. * @var bool
  45. * @access private
  46. */
  47.  
  48. private $cache = 0;
  49.  
  50. /**
  51. * Parsuje plik ini
  52. * jezeli plik nieistnieje tworzy go
  53. *
  54. * @param string $handle
  55. * @return void
  56. * @access public
  57. */
  58.  
  59. public function __construct ($handle) {
  60. $this -> handle = $handle;
  61. if ((file_exists ($handle.'.cache') && filectime ($handle) > filectime ($handle.'.cache')) || !file_exists ($handle.'.cache')) {
  62. $this -> cache = 1;
  63. if (!($this -> ini = parse_ini_file ($handle, true))) {
  64. $file = fopen ($handle, "w");
  65. fclose ($file);
  66. }
  67. }
  68. else
  69. $this -> ini = unserialize (file_get_contents($handle.'.cache'));
  70. }
  71.  
  72. /**
  73. * Sprawdza czy istanieje dana opcja
  74. *
  75. * @param string $name
  76. * @param string $section (optional) okresla w jakiej sekcji ma sprawdzac czy znajduje sie opcja
  77. * @return bool
  78. * @access public
  79. */
  80.  
  81. public function optionExists ($name, $section = 0) {
  82. if ($section)
  83. return array_key_exists ($name, $this -> ini [$section]);
  84. else {
  85. foreach ($this -> ini as $key => $value) {
  86. if (!empty($value[$name]))
  87. return array_key_exists ($name, $value);
  88. }
  89. }
  90. }
  91.  
  92. /**
  93. * Pobiera pojedyncza opcje
  94. * Jezeli nie zostal podany parametr $section funkcja zwroci pierwsza napotkana o
    pcje o nazwie $name
  95. *
  96. * @param string $name
  97. * @param string $section (optional) okresla w jakiej sekcji znajduje sie opcja
  98. * @return mixed
  99. * @access public
  100. */
  101.  
  102. public function getOption ($name, $section = 0) {
  103. if ($this -> optionExists ($name, $section)) {
  104. if (is_string($section))
  105. return $this -> ini [$section][$name];
  106. else {
  107. foreach ($this -> ini as $key => $value) {
  108. if (!empty($value[$name]))
  109. return $value[$name];
  110. }
  111. }
  112. }
  113. else
  114. return false;
  115. }
  116.  
  117. /**
  118. * Dodaje (lub edytuje) opcję
  119. *
  120. * @param string $name
  121. * @param string $value
  122. * @param string $section (optional) okresla w jakiej sekcji znajduje sie opcja
  123. * @return void
  124. * @access public
  125. */
  126.  
  127. public function setOption ($name, $value, $section = '') {
  128. $this -> save = 1;
  129. $section = (empty($section)) ? 'others' : $section;
  130. $this -> ini [$section][$name] = $value;
  131. }
  132.  
  133. /**
  134. * Destructor klasy
  135. * Jeżeli nastapila zmiana jakiejs opcji zapisuje opcje do pliku $this -> handle
  136. * Jeżeli istnieje taka potrzeba tworzy cache pliku $this -> handle
  137. *
  138. * @return void
  139. * @access public
  140. */
  141.  
  142. public function __destruct () {
  143. if ($this -> save) {
  144. foreach ($this -> ini as $section_name => $section) {
  145. $content .= '['.$section_name."]n";
  146. foreach ($section as $option_name => $option)
  147. $content .= $option_name.' = '.$option."n";
  148. }
  149. file_put_contents ($this -> handle, $content);
  150. file_put_contents ($this -> handle.'.cache', serialize ($this -> ini));
  151. }
  152. elseif ($this -> cache)
  153. file_put_contents ($this -> handle.'.cache', serialize ($this -> ini));
  154. }
  155. }
  156. ?>


PS. Mój 100-ny post biggrin.gif
NuLL
Moglbys stworzyc klase do calosci obslugi ini - czyli czytanie, proste cache na bazie serializacji ( parsowanie plikow ini jest b.wolne ) oraz zapis smile.gif
Levabul
Cache może dorobie w najbliższym czasie ale narazie musze zająć się szkołą :/
bela
Cache to kilka linijek, wystarczy sprawdzić datę modyfikacji pliku ini, datę modyfikacji pliku cache i prosty warunek ;]
aleksander
komentarze phpDocumentor i wykożystanie interfejsu ArrayAccess by się przydało;]
Levabul
Cache jest, udokumentowanie kodu też jest.

Zdecydowałem że całość udostępniona będzie na licencji Crative Common 2.0 (http://creativecommons.org/licenses/by-nc-sa/2.0/)
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.