Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [klasa] Zapis danych do pliku PHP, Dostosowana do zapisu konfiguracji
WebCM
post
Post #1





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

Ostrzeżenie: (0%)
-----


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


--------------------
„Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
Go to the top of the page
+Quote Post
Moli
post
Post #2





Grupa: Zarejestrowani
Postów: 662
Pomógł: 45
Dołączył: 26.03.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Hmm nie widzę przydatności tej klasy. A tablice, do pliku lepije zapisywać z funkcja serialize.
Go to the top of the page
+Quote Post
WebCM
post
Post #3





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

Ostrzeżenie: (0%)
-----


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.

Ten post edytował WebCM 8.11.2007, 18:58:53


--------------------
„Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
Go to the top of the page
+Quote Post
Moli
post
Post #4





Grupa: Zarejestrowani
Postów: 662
Pomógł: 45
Dołączył: 26.03.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Przy zapisie serialize wystarczy ze dasz
  1. <?php die() ; ?>

a przy pobraniu omijasz pierwsze kilka liter:)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 15:32