Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> edit_ini_file();, funkcja do edycji plików ini
Mlodycompany
post
Post #1





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


Witam. Napisałem na własne potrzeby funkcje do edycji plików ini. Chciałbym abyście ocenili i powiedzieli co jest źle, co poprawić etc.

  1. <?php
  2.  
  3. function edit_ini_file( $file, $values, $section = false ) {
  4. $str = "";
  5. $fo = fopen( $file, "r" );
  6. while ( true ) {
  7. if ( feof( $fo ) ) { //dopisanie nowych wartości na końcu pliku
  8. if ( $section === true ) {
  9. foreach ( $values[ $currentSection ] as $name => $value ) { // dopisanie do ostatniej sekcji
  10. $str .= "{$name} = {$value}\n";
  11. unset( $values[ $currentSection ][ $name ] );
  12. }
  13. unset( $values[ $currentSection ] );
  14. foreach ( $values as $sectionN => $sectionV ) { // dopisanie nowych sekcji i wartosci
  15. $str .= "[{$sectionN}]\n";
  16. foreach ( $sectionV as $name => $value ) {
  17. $str .= "{$name} = {$value}\n";
  18. }
  19. }
  20. }
  21. else{
  22. foreach($values as $name => $value){ //dopisanie nowych wartosci bez sekcji
  23. $str .= "{$name} = {$value}\n";
  24. }
  25. }
  26. break;
  27. }
  28.  
  29. $line = fgets( $fo );
  30.  
  31. if ( $line{0} == ";"){ //przepisanie komentarzy
  32. $str .= $line."\n";
  33. continue;
  34. }
  35. if(trim($line) == "" || $line == "\n") continue;
  36. if ( $section === true && preg_match( "/\[(.*?)\]/", $line, $sectionInfo ) ) {
  37. if ( isSet( $currentSection ) && isset( $values[ $currentSection ] ) ) {
  38. foreach ( $values[ $currentSection ] as $name => $value ) { //dodanie pozostalych wartosci do sekcji
  39. $str .= "{$name} = {$value}\n";
  40. unset( $values[ $currentSection ][ $name ] );
  41. }
  42. unset( $values[ $currentSection ] );
  43. }
  44. $currentSection = $sectionInfo[ 1 ];
  45. $str .= $sectionInfo[ 0 ]."\n";
  46. continue;
  47. }
  48. else if ( $section === true ) {
  49. list($name, $value) = explode( "=", $line );
  50. $name = trim($name);
  51. if ( isSet( $values[ $currentSection ][ $name ] ) ) { //zmiana wartosci
  52. $str .= "{$name} = {$values[ $currentSection ][ $name ]}\n";
  53. unset( $values[ $currentSection ][ $name ] );
  54. continue;
  55. }
  56. else {
  57. $str .= $line."\n";
  58. continue;
  59. }
  60. }
  61. else{
  62. list($name, $value) = explode( "=", $line );
  63. $name = trim($name);
  64. if ( isSet( $values[ $name ] ) ) { //zmiana wartosci
  65. $str .= "{$name} = {$values[ $name ]}\n";
  66. unset( $values[ $name ] );
  67. continue;
  68. }
  69. else {
  70. $str .= $line."\n";
  71. continue;
  72. }
  73. }
  74. }
  75. $fw = fopen($file, "w+");
  76. fwrite($fw, $str);
  77. }
  78. //przykładowe użycie
  79. edit_ini_file( "file.ini", array( "istniejaca_sekcja" => array( "klucz" => "wartosc", "nowy-klucz" => "wartosc" ), "nowa-sekcja" => array( "nowy-klucz" => "wartosc" ) ), true );
  80. edit_ini_file( "file2.ini", array( "klucz" => "wartosc", "nowy-klucz" => "wartosc" ), false );
  81. ?>



Pozdrawiam (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
emp
post
Post #2





Grupa: Zarejestrowani
Postów: 195
Pomógł: 14
Dołączył: 12.01.2006
Skąd: Gotham City

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


Zamknij skrypt w klase. Zrób w niej metody prywatene typu 'dopisanie nowych wartości na końcu pliku', 'przepisanie komentarzy', 'zmiana wartosci'
Klasa może być statyczna lub nie zaleznie od potrzeb. Zamknięcie w klase i ekstrakcja metod do tej klasy z tego skryptu zapewni ci lepszą możliwość pielegnacji, refaktoringu, elestyczność, czytelność itp
I jeśli nie potrzebujesz specjalistycznych funkcjonalności i nie robisz tego w celach edukacyjnych to możesz skorzystać z gotowych rozwiązań do zarządzania plikami ini Config_Lite
pissss joł
Go to the top of the page
+Quote Post
Mlodycompany
post
Post #3





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


Nie wiem czy jest sens zamknięcia tej funkcji w klasę. Gdyby to było kilka funkcji to jeszcze rozumiem, no chyba że się mylę i lepiej rozbić tą funkcje na kilka mniejszych. Robię to w celach zarazem edukacyjnych oraz na potrzeby projektu
Go to the top of the page
+Quote Post
melkorm
post
Post #4





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


http://framework.zend.com/manual/1.12/en/z...troduction.html

Poczytaj, popatrz, wyciągnij wnioski.
Go to the top of the page
+Quote Post
Mlodycompany
post
Post #5





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


Czyli jednak zamknąć to w klasę. Jak znajdę chwile to przerobie
Go to the top of the page
+Quote Post
batman
post
Post #6





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Poczytaj też o funkcji parse_ini_file.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.12.2025 - 18:06