Просмотр файла engine/classes/inifile.class.php

Размер файла: 10.79Kb
  1. <?
  2. /**
  3. * Класс для чтения и записи ini файла
  4. */
  5. class iniFile{
  6. /**
  7. * (string) Путь и имя ini файла
  8. */
  9. public $ini_file;
  10. /**
  11. * (string) Весь ini файл в виде строки (file_get_contents())
  12. */
  13. public $ini_data;
  14. /**
  15. * (array) Содержимое ini файла после работы parse_ini_file(file, true)
  16. */
  17. public $ini_array = array();
  18. /**
  19. * Для превью ini массива (перед сохранением)
  20. */
  21. private $preview;
  22. const WRONG_EXT = 'У файла должно быть расширение *.ini';
  23. const NOT_FOUND = 'Указанный файл не найден';
  24. const WRONG_READ = 'Не возможно прочитать указанный файл';
  25. const ERROR_SAVE = 'Не могу сохранить файл';
  26. /**
  27. * @param string Путь/имя_файла
  28. * @return void
  29. */
  30. public function __construct($path_to_ini_file){
  31. $this->ini_file = $path_to_ini_file;
  32. if(!preg_match("#\.ini$#", $this->ini_file)){
  33. $this->Exept(self::WRONG_EXT);
  34. }
  35. else{
  36. if(file_exists($this->ini_file)){
  37. $this->ini_array = parse_ini_file($this->ini_file,true);
  38. $this->ini_data = file_get_contents($this->ini_file);
  39. }
  40. }
  41. }
  42. /**
  43. * Метод выбрасывает исключения в случае ошибок
  44. * @param string - текст исключения
  45. */
  46. private function Exept($text){
  47. throw new Exception($text);
  48. }
  49. /**
  50. * Метод для создания пустого ini файла
  51. * @param string Путь/имя_файла
  52. * @return bool
  53. */
  54. public function create(){
  55. return file_put_contents($this->ini_file,'');
  56. }
  57. /**
  58. * Метод вернёт содержимое ini файла в виде строки
  59. * @return string
  60. */
  61. public function readStringIni(){
  62. if(!file_exists($this->ini_file))
  63. $this->Exept(self::NOT_FOUND);
  64. elseif(!is_readable($this->ini_file))
  65. $this->Exept(self::WRONG_READ);
  66. else{
  67. return $this->ini_data;
  68. }
  69. }
  70. /**
  71. * Метод возвращает распарсенный ini файл
  72. * @return array
  73. */
  74. public function read(){
  75. if(!file_exists($this->ini_file))
  76. $this->Exept(self::NOT_FOUND);
  77. elseif(!is_readable($this->ini_file))
  78. $this->Exept(self::WRONG_READ);
  79. else{
  80. return $this->ini_array;
  81. }
  82. }
  83. /**
  84. * Метод добавляет секцию в файл
  85. * @param string - наименовании секции
  86. * @return void
  87. */
  88. public function addSection($namesection){
  89. file_put_contents($this->ini_file, '['.$namesection.']'.PHP_EOL);
  90. }
  91. /**
  92. * Метод добавляет параметр в секцию
  93. * @param string - наименовании секции в которую добавляется параметр
  94. * @param string - наименование параметра
  95. * @param mixid - значение параметра
  96. * @return void
  97. */
  98. public function addParam($namesection, $nameparam, $value){
  99. $this->ini_array[$namesection][$nameparam]= $value;
  100. }
  101. /**
  102. * Метод удаляет целую секцию с параметрами
  103. * @param string наиманование секции
  104. * @param bool
  105. * true - удалить
  106. * false - удалить только из массива - возможность предосмотра метод preview()
  107. * @return void
  108. */
  109. public function deleteSection($namesection, $drop=true){
  110. if(is_array($this->ini_array)){
  111. foreach($this->ini_array as $gen=>$param){
  112. if($gen != $namesection){
  113. foreach($param as $p=>$v){
  114. $change[$gen][$p] = $v;
  115. }
  116. }
  117. }
  118. $this->preview = $change;
  119. }
  120. if($drop === true){
  121. $this->ini_array = $this->preview;
  122. $this->save();
  123. }
  124. }
  125.  
  126. /**
  127. * Метод удаляет параметр из указанной секции
  128. * @param string наиманование секции
  129. * @param string наименование параметра
  130. * @param bool
  131. * true - удалить
  132. * false - удалить только из массива - возможность предосмотра метод preview()
  133. * @return void
  134. */
  135. public function deleteParam($namesection, $paramname, $drop=true){
  136. if(is_array($this->ini_array)){
  137. foreach($this->ini_array as $gen=>$param){
  138.  
  139. if($gen == $namesection){
  140. foreach($param as $p=>$v){
  141. if($p != $paramname)
  142. $change[$gen][$p] = $v;
  143. }
  144. }
  145. }
  146. $this->preview = $change;
  147. }
  148. if($drop === true){
  149. $this->ini_array = $this->preview;
  150. $this->save();
  151. }
  152. }
  153. /**
  154. * Метод для смены имени секции
  155. * @param string старое имя
  156. * @param string новое имя
  157. * @param bool
  158. * true - удалить
  159. * false - удалить только из массива - возможность предосмотра метод preview()
  160. *
  161. * @return void
  162. */
  163. public function changeSectionName($oldname, $newname,$change=true){
  164. if(is_array($this->ini_array)){
  165. foreach($this->ini_array as $gen=>$param){
  166. if($gen == $oldname)
  167. $gen = $newname;
  168.  
  169. foreach($param as $p=>$v){
  170. $change[$gen][$p] = $v;
  171. }
  172.  
  173. }
  174. $this->preview = $change;
  175. }
  176. if($change === true){
  177. $this->ini_array = $this->preview;
  178. $this->save();
  179. }
  180. }
  181.  
  182. /**
  183. * Метод для смены имени параметра секции
  184. * @param string имя секции
  185. * @param string старое имя
  186. * @param string новое имя
  187. * @param bool
  188. * true - удалить
  189. * false - удалить только из массива - возможность предосмотра метод preview()
  190. *
  191. * @return void
  192. */
  193. public function changeParamName($namesection, $oldname, $newname,$change=true){
  194. if(is_array($this->ini_array)){
  195. foreach($this->ini_array as $gen=>$param){
  196. if($gen == $namesection){
  197. foreach($param as $p=>$v){
  198. if($p == $oldname)
  199. $p = $newname;
  200. $change[$gen][$p] = $v;
  201. }
  202. }
  203. }
  204.  
  205. $this->preview = $change;
  206. }
  207. if($change === true){
  208. $this->ini_array = $this->preview;
  209. $this->save();
  210. }
  211. }
  212. /**
  213. * Метод для изменения значения параметра конкретной секции
  214. * @param string имя секции
  215. * @param string имя параметра
  216. * @param string новое значение
  217. * @param bool
  218. * true - удалить
  219. * false - удалить только из массива - возможность предосмотра метод preview()
  220. *
  221. * @return void
  222. */
  223. public function changeParamValue($namesection, $nameparam, $newvalue,$set=true){
  224. if(is_array($this->ini_array)){
  225. foreach($this->ini_array as $gen=>$param){
  226. if($gen == $namesection){
  227. foreach($param as $p=>$v){
  228. if($p == $nameparam)
  229. $v = $newvalue;
  230. $change[$gen][$p] = $v;
  231. }
  232. }
  233. }
  234.  
  235. $this->preview = $change;
  236. }
  237. if($set === true){
  238. $this->ini_array = $this->preview;
  239. $this->save();
  240. }
  241. }
  242. /**
  243. * Метод для мониторинга изменений массива ini файла во время редактирования с помощью класса
  244. * @return array
  245. */
  246. public function preview(){
  247. return $this->preview;
  248. }
  249. /**
  250. * Метод сохраняет добавленные секции и параметры в файл
  251. * @return bool
  252. */
  253. public function save(){
  254. if(is_array($this->ini_array)){
  255. $string = '';
  256. foreach($this->ini_array as $gen=>$param){
  257. $string .= '['.$gen.']'.PHP_EOL;
  258.  
  259. foreach($param as $p=>$v){
  260. $string .= $p.'='.$v.PHP_EOL;
  261. }
  262. }
  263. if(!file_put_contents($this->ini_file,$string)){
  264. $this->Exept(self::ERROR_SAVE);
  265. return false;
  266. }
  267. }
  268. return true;
  269. }
  270. }
  271. ?>