Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: edit_ini_file();
Forum PHP.pl > Inne > Oceny
Mlodycompany
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 smile.gif
emp
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ł
Mlodycompany
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
melkorm
http://framework.zend.com/manual/1.12/en/z...troduction.html

Poczytaj, popatrz, wyciągnij wnioski.
Mlodycompany
Czyli jednak zamknąć to w klasę. Jak znajdę chwile to przerobie
batman
Poczytaj też o funkcji parse_ini_file.
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.