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.
<?php
function edit_ini_file( $file, $values, $section = false ) {
$str = "";
$fo = fopen( $file, "r" ); while ( true ) {
if ( feof( $fo ) ) { //dopisanie nowych wartości na końcu pliku if ( $section === true ) {
foreach ( $values[ $currentSection ] as $name => $value ) { // dopisanie do ostatniej sekcji
$str .= "{$name} = {$value}\n";
unset( $values[ $currentSection ][ $name ] ); }
unset( $values[ $currentSection ] ); foreach ( $values as $sectionN => $sectionV ) { // dopisanie nowych sekcji i wartosci
$str .= "[{$sectionN}]\n";
foreach ( $sectionV as $name => $value ) {
$str .= "{$name} = {$value}\n";
}
}
}
else{
foreach($values as $name => $value){ //dopisanie nowych wartosci bez sekcji
$str .= "{$name} = {$value}\n";
}
}
break;
}
if ( $line{0} == ";"){ //przepisanie komentarzy
$str .= $line."\n";
continue;
}
if(trim($line) == "" || $line == "\n") continue
; if ( $section === true && preg_match( "/\[(.*?)\]/", $line, $sectionInfo ) ) { if ( isSet( $currentSection ) && isset( $values[ $currentSection ] ) ) { foreach ( $values[ $currentSection ] as $name => $value ) { //dodanie pozostalych wartosci do sekcji
$str .= "{$name} = {$value}\n";
unset( $values[ $currentSection ][ $name ] ); }
unset( $values[ $currentSection ] ); }
$currentSection = $sectionInfo[ 1 ];
$str .= $sectionInfo[ 0 ]."\n";
continue;
}
else if ( $section === true ) {
list
($name, $value) = explode( "=", $line ); if ( isSet( $values[ $currentSection ][ $name ] ) ) { //zmiana wartosci $str .= "{$name} = {$values[ $currentSection ][ $name ]}\n";
unset( $values[ $currentSection ][ $name ] ); continue;
}
else {
$str .= $line."\n";
continue;
}
}
else{
list
($name, $value) = explode( "=", $line ); if ( isSet( $values[ $name ] ) ) { //zmiana wartosci $str .= "{$name} = {$values[ $name ]}\n";
unset( $values[ $name ] ); continue;
}
else {
$str .= $line."\n";
continue;
}
}
}
$fw = fopen($file, "w+"); }
//przykładowe użycie
edit_ini_file
( "file.ini", array( "istniejaca_sekcja" => array( "klucz" => "wartosc", "nowy-klucz" => "wartosc" ), "nowa-sekcja" => array( "nowy-klucz" => "wartosc" ) ), true );edit_ini_file
( "file2.ini", array( "klucz" => "wartosc", "nowy-klucz" => "wartosc" ), false );?>
Pozdrawiam