INI Datei beschreiben

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • INI Datei beschreiben

    Hallo Liebe Gemeinde!

    Ich habe ein kleines Problem bei dem beschreiben einer INI Datei in PHP4.

    Und zwar hab ich folgendes Problem:

    Erstmal hier der Code inklusive Funktionen:
    PHP-Code:
    function parseIniFile($iIniFile)
        {
        
    $aResult  =
        
    $aMatches = array();

        
    $a = &$aResult;
        
    $s '\s*([[:alnum:]_\- \*]+?)\s*';    preg_match_all('#^\s*((\['.$s.'\])|(("?)'.$s.'\\5\s*=\s*("?)(.*?)\\7))\s*(;[^\n]*?)?$#ms', @file_get_contents($iIniFile), $aMatchesPREG_SET_ORDER);

        foreach (
    $aMatches as $aMatch)
            {
            if (empty(
    $aMatch[2]))
                    
    $a [$aMatch[6]] = $aMatch[8];
              else    
    $a = &$aResult [$aMatch[3]];
            }

        return 
    $aResult;
        }


    function 
    array_to_ini($array){

      foreach(
    $array as $key => $value){

        if(
    is_array($value)){

          
    $output .=  "[$key]\n";
          foreach(
    $value as $key2 => $value2){
            
    $output .=  "$key2=$value2\n";
          }
        }  else        {

          
    $output .=  "$key=$value\n";
        }
      }
      return 
    $output;
    }

    function 
    file_put_contents($filename$data) {
            if ( 
    is_array($data) ) {
                
    $data implode(''$data);
            }
            
    $handle fopen ($filename'w');
            
    // Datei zum schreiben oeffnen und Inhalt loeschen
            
    $return fwrite($handle$datastrlen($data));
            
    // Inhalt in die Datei schreiben
            
    fclose($handle);
            
    // Datei schliessen
            
    return $return;
        }


    $ini_array parseIniFile("lmo/ligen/1-liga-5-saison.l98",true);
    $ini_array[$lmo_id]['NOT']  = $trainer_name;
    $ini_array[$lmo_id]['URL']  = $icq;
    $ini_array[$lmo_id]['URL2'] = $trainer_id;
    $ini_array[$lmo_id]['URL3'] = $trainer_id;
    $neue_ini array_to_ini($ini_array);
    file_put_contents("lmo/ligen/1-liga-5-saison.l98"$neue_ini); 
    Nun zu dem Problem. Wenn ich die Ini Datei im Urzustand anschaue hat sie auch einzelne Felder die nach dem = keinen Wert haben und leer sind. Diese füllen sich erst im laufe der Zeit (Saison) mit Berichten usw. Das Problem ist aber das sie bei dem erstellen des ganzen immer gleich in der INI mit drin sind.

    INI im Originalzustand: [COLOR="Red"](z.B hier die Felder NT1, BE1 und TI1)[/COLOR]

    [Round2]
    D1=01.01.2009
    D2=01.01.2010
    TA1=16
    TB1=13
    GA1=2
    GB1=3
    NT1=
    BE1=
    TI1=
    AT1=1231527600
    TA2=14
    TB2=11
    GA2=1
    GB2=3
    NT2=
    BE2=
    TI2=
    AT2=1231855200


    Nun die Ini nach dem ersten Speichern durch das Script. (Die angaben werden korrekt gespeichert aber die Felder die leer sind werden durch das darunterliegende Feld gefüllt und das sieht dann so aus.

    [Round2]
    D1=01.01.2009
    D2=01.01.2010
    TA1=16
    TB1=13
    GA1=2
    GB1=3
    NT1=BE1=
    TI1=AT1=1231527600
    TA2=14
    TB2=11
    GA2=1
    GB2=3
    NT2=BE2=
    TI2=AT2=1231855200


    Nun wollt ich mal fragen ob hier vieleicht jemand von Euch ne Lösung zur Hand hat wie ich dies verhindern kann. Ich probiere schon seit gestern daran rum und verzweifle bald.

    Nach mehrmaligem speichern zerstört mir das natürlich die ganze INI Datei und macht sie unbrauchbar.

    Wäre von daher für abhilfe sehr dankbar.


    LG


    Kallewaze
    Vielen Dank für Euer Bemühen!

  • #2
    Ich kann dir zwar nicht weiterhelfen, aber ich kann dir zeigen, wie ich es gelöst hätte. Die PHP5 Filesystem-Funktionen musst du halt umschreiben. Und wieso zur Hölle hast du kein PHP5 zur Verfügung? Wir sind im Jahr 2009, hallo?? ;-)

    PHP-Code:
    function ini_write($filePath$data)
    {
        
    $output '';
        
        foreach (
    $data as $section => $values)
        {
            
    $output .= "[$section]\r\n";
            
            foreach (
    $values as $key => $val) {
                
    $output .= "$key=$val\r\n";
            }
            
            
    $output .= "\r\n";
        }
        
        
    file_put_contents($filePathtrim($output));
    }


    function 
    ini_read($filePath)
    {
        
    $lines array_map('trim'file($filePath));
        
    $data  = array();
        
        
    $currentSection null;
        foreach (
    $lines as $line)
        {
            if (
    substr($line01) == '[') {
                
    $currentSection substr($line1, -1);
                
    $data[$currentSection] = array();
            }
            else {
                list(
    $key$val) = explode('='$line);
                
                if (empty(
    $key)) {
                    continue;
                }
                
                
    $data[$currentSection][$key] = $val;
            }
        }
        
        return 
    $data;
    }

    $data = array(
        
    'Round1' => array(
            
    'D1'  => '01.01.2005',
            
    'D2'  => '01.01.2054',
            
    'TA1' => 1346,
            
    'NT1' => 'sadf',
            
    'BE1' => null,
            
    'AT1' => 13600,
            
    'TA2' => 12
        
    ),
        
    'Round2' => array(
            
    'D1'  => '01.01.2009',
            
    'D2'  => '01.01.2010',
            
    'TA1' => 16,
            
    'NT1' => null,
            
    'BE1' => null,
            
    'AT1' => 1231527600,
            
    'TA2' => 14
        
    )
    );
    ini_write('test.ini'$data);
    $data ini_read('test.ini');
    var_dump($data); 
    Zuletzt geändert von ModestLife; 19.03.2009, 09:23.
    Mein PHP Blog

    Kommentar


    • #3
      Hallo und Vielen Dank erstmal für deine Antwort!


      Also ich ha gerade mal bei meinem Hoster nachgesehen und festgestellt das ich tatsächlich nur PHP 4.9 besitze dort.

      Nun zu meiner Frage.

      Welche Filesystem Funktion meinst du?

      Muss ich so die ganze Datei von Hand füllen oder wie ist das gemeint?
      PHP-Code:
      $data = array(
          
      'Round1' => array(
              
      'D1'  => '01.01.2005',
              
      'D2'  => '01.01.2054',
              
      'TA1' => 1346,
              
      'NT1' => 'sadf',
              
      'BE1' => null,
              
      'AT1' => 13600,
              
      'TA2' => 12
          
      ),
          
      'Round2' => array(
              
      'D1'  => '01.01.2009',
              
      'D2'  => '01.01.2010',
              
      'TA1' => 16,
              
      'NT1' => null,
              
      'BE1' => null,
              
      'AT1' => 1231527600,
              
      'TA2' => 14
          
      )
      ); 

      LG
      Vielen Dank für Euer Bemühen!

      Kommentar


      • #4
        Das war nur ein Anschaungsbeispiel.

        Du kannst das INI File mit ini_read() auslesen, danach gewisse Einträge mit $data[$section][$key] = $val; ändern und danach das Ganze mit ini_write() wieder speichern.

        Wie gesagt: Wollte dir nur eine andere Sicht auf die Systematik geben. Habe deinen Post vorhin kurz als Anlass genommen, selber sowas zu schreiben ... ;-)

        Hier gibt's übrigens die kommentierte Version.
        Mein PHP Blog

        Kommentar


        • #5
          ich bins nochmal.

          also mein code sieht nun folgendermaßen aus:

          PHP-Code:
          function file_put_contents($filename$data) {
                  if ( 
          is_array($data) ) {
                      
          $data implode(''$data);
                  }
                  
          $handle fopen ($filename'w');
                  
          // Datei zum schreiben oeffnen und Inhalt loeschen
                  
          $return fwrite($handle$datastrlen($data));
                  
          // Inhalt in die Datei schreiben
                  
          fclose($handle);
                  
          // Datei schliessen
                  
          return $return;
              }


          function 
          ini_write($filePath$data)
          {
              
          $output '';

              foreach (
          $data as $section => $values)
              {
                  
          $output .= "[$section]\r\n";

                  foreach (
          $values as $key => $val) {
                      
          $output .= "$key=$val\r\n";
                  }

                  
          $output .= "\r\n";
              }

              
          file_put_contents($filePathtrim($output));
          }


          function 
          ini_read($filePath)
          {
              
          $lines array_map('trim'file($filePath));
              
          $data  = array();

              
          $currentSection null;
              foreach (
          $lines as $line)
              {
                  if (
          substr($line01) == '[') {
                      
          $currentSection substr($line1, -1);
                      
          $data[$currentSection] = array();
                  }
                  else {
                      list(
          $key$val) = explode('='$line);

                      if (empty(
          $key)) {
                          continue;
                      }

                      
          $data[$currentSection][$key] = $val;
                  }
              }

              return 
          $data;
          }

          $data = array(
                  
          $lmo_id => array(
                  
          'URL'  => $icq,
                  
          'URL2'  => $trainer_id,
                  
          'URL3' => $trainer_id,
                  
          'NOT' => $trainer_name
              
          )
          );

          ini_write('lmo/ligen/5-liga-5-saison.l98'$data);
          $data ini_read('lmo/ligen/5-liga-5-saison.l98'); 
          Er speichert die Daten nun in der Datei ab aber löscht den kompletten Inhalt der Datei so das nur noch das drin steht was ich jetzt mit dem script eingefügt habe.

          Hast du da eine Lösung zur Hand?

          LG
          Vielen Dank für Euer Bemühen!

          Kommentar


          • #6
            Erst die Daten auslesen und dann explizit nur das ändern was du auch willst.

            PHP-Code:
            $data ini_read('lmo/ligen/5-liga-5-saison.l98');
            $data[$lmo_id]['URL']  = $icq;
            $data[$lmo_id]['URL2'] = $trainer_id;
            $data[$lmo_id]['URL3'] = $trainer_id;
            $data[$lmo_id]['NOT']  = $trainer_name;
            ini_write('lmo/ligen/5-liga-5-saison.l98'$data); 
            Bemerke aber, dass $data[$lmo_id] als Array/INI Section existieren muss. Wenn du weisst, dass es den Key nicht gibt, kannst du auch sowas machen:

            PHP-Code:
            $data ini_read('lmo/ligen/5-liga-5-saison.l98');
            $data[$lmo_id] = array(
                
            'URL'  => $icq,
                
            'URL2'  => $trainer_id,
                
            'URL3' => $trainer_id,
                
            'NOT' => $trainer_name
            );
            ini_write('lmo/ligen/5-liga-5-saison.l98'$data); 
            Zuletzt geändert von ModestLife; 19.03.2009, 10:32.
            Mein PHP Blog

            Kommentar


            • #7
              Das war die Lösung!


              Danke nochmal und einen weiterhin schönen Tag wünsche ich Dir!


              LG
              Vielen Dank für Euer Bemühen!

              Kommentar

              Lädt...
              X