Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [klasa] Zapis danych do pliku PHP
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
WebCM
Klasa służy do zapisu zmiennych i tablic do pliku PHP. Zawiera podstawowe funkcje. Może komuś się przyda. Wymagane PHP5. Klasa nie zajmuje się obróbką danych - to już zadanie kodu, który ją wykorzystuje. smile.gif
CODE
  1. <?php
  2. function cfg_escape($x)
  3. {
  4. $x=str_replace(''',''',$x);
  5. return str_replace('','&#092;',$x);
  6. }
  7.  
  8. class Config
  9. {
  10. private $in='', $file;
  11. public $var='cfg+'; //Domyślna zmienna dla tablicy ustawianej przez SET()
  12.  
  13. function __construct($file)
  14. {
  15. $this->file=$file;
  16. }
  17.  
  18. #Dodaj dane z tablic
  19. private function loop(&$array)
  20. {
  21. foreach($array as $key=>$val)
  22. {
  23. if(is_array($val))
  24. {
  25. $this->in.='''.$key.''=>array(';
  26. $this->loop($val);
  27. $this->in.='),';
  28. }
  29. else
  30. {
  31. if($val==='on') $val=1;
  32. $this->in.='''.$key.''=>'.((is_numeric($val))?$val:'''.cfg_escape($val).''').',';
  33. }
  34. }
  35. }
  36.  
  37. #Dodaj zmienną
  38. function add($var,&$val)
  39. {
  40. if(is_array($val))
  41. {
  42. $this->in.='$'.$var.'=array(';
  43. $this->loop($val);
  44. $this->in.=');';
  45. }
  46. else
  47. {
  48. $this->in.='$'.$key.'='.((is_numeric($val))?$val:'''.cfg_escape($val).''').';';
  49. }
  50. }
  51.  
  52. #Dodaj wiele wartości
  53. function set(&$list)
  54. {
  55. $this->in.='$'.$this->var.'=array(';
  56. $this->loop($list);
  57. $this->in.=');';
  58. }
  59.  
  60. #Zapisz
  61. function save(&$data=null)
  62. {
  63. if($data) $this->set($data);
  64. if(file_put_contents($this->file,'<?php '.$this->in.' ?>',2))
  65. {
  66. return true;
  67. }
  68. return false;
  69. }
  70. }
  71. ?>

Przykład budowy pliku przy pomocy klasy:
  1. <?php
  2. $file = new Config('katalog/nazwa_pliku.php');
  3. $file -> add('config', $_POST); //Dodajemy zmienną $config - ma zawierać klucze z tablicy $_POST
  4. $file -> add('zmienna', 'Hello world!'); //$zmienna ma wartość "Hello world!"
  5.  
  6. if($file -> save())
  7. {
  8. echo 'Zapisano ustawienia.';
  9. }
  10. return; //Kończymy! (jeśli aktualny plik ma się dalej nie wykonywać - nie tylko dla funkcji)
  11. ?>

Klasa nie sprawdza poprawności nazw zmiennych, dlatego powinny być poprawne. Inne funkcje:
SET($zmienna, $tablica) - przypisywanie kluczy tablicy do domyślnej zmiennej
SAVE($data) - można od razu wykonać SET(), przekazując tablicę jako argument $data
Moli
Hmm nie widzę przydatności tej klasy. A tablice, do pliku lepije zapisywać z funkcja serialize.
WebCM
Nie zawsze możesz ograniczyć dostęp z zewnątrz do katalogu - wtedy potencjalnie można podejrzeć zawartość pliku ze zserializowaną tablicą. Klasa przeznaczona jest dla tych, którzy wybiorą zapis danych do pliku w postaci kodu PHP. Ponadto może znajdować się więcej zmiennych. smile.gif

PS. Forum zamieniło na początku kodu: \\\\ na encję z zielonym &. Myślę, że nic więcej.
Moli
Przy zapisie serialize wystarczy ze dasz
  1. <?php die() ; ?>

a przy pobraniu omijasz pierwsze kilka liter:)
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.