php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 19-03-2009, 10:43
Kallewaze
 Registrierter Benutzer
Links : Onlinestatus : Kallewaze ist offline
Registriert seit: Mar 2009
Beiträge: 5
Kallewaze ist zur Zeit noch ein unbeschriebenes Blatt
Kallewaze eine Nachricht über ICQ schicken
Standard 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: (z.B hier die Felder NT1, BE1 und TI1)

[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!
Mit Zitat antworten
  #2 (permalink)  
Alt 19-03-2009, 11:15
ModestLife
 Registrierter Benutzer
Links : Onlinestatus : ModestLife ist offline
Registriert seit: Sep 2007
Beiträge: 105
ModestLife ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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); 

Geändert von ModestLife (19-03-2009 um 11:23 Uhr)
Mit Zitat antworten
  #3 (permalink)  
Alt 19-03-2009, 11:38
Kallewaze
 Registrierter Benutzer
Links : Onlinestatus : Kallewaze ist offline
Registriert seit: Mar 2009
Beiträge: 5
Kallewaze ist zur Zeit noch ein unbeschriebenes Blatt
Kallewaze eine Nachricht über ICQ schicken
Standard

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!
Mit Zitat antworten
  #4 (permalink)  
Alt 19-03-2009, 11:47
ModestLife
 Registrierter Benutzer
Links : Onlinestatus : ModestLife ist offline
Registriert seit: Sep 2007
Beiträge: 105
ModestLife ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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.
Mit Zitat antworten
  #5 (permalink)  
Alt 19-03-2009, 12:22
Kallewaze
 Registrierter Benutzer
Links : Onlinestatus : Kallewaze ist offline
Registriert seit: Mar 2009
Beiträge: 5
Kallewaze ist zur Zeit noch ein unbeschriebenes Blatt
Kallewaze eine Nachricht über ICQ schicken
Standard

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!
Mit Zitat antworten
  #6 (permalink)  
Alt 19-03-2009, 12:29
ModestLife
 Registrierter Benutzer
Links : Onlinestatus : ModestLife ist offline
Registriert seit: Sep 2007
Beiträge: 105
ModestLife ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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); 

Geändert von ModestLife (19-03-2009 um 12:32 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 19-03-2009, 13:34
Kallewaze
 Registrierter Benutzer
Links : Onlinestatus : Kallewaze ist offline
Registriert seit: Mar 2009
Beiträge: 5
Kallewaze ist zur Zeit noch ein unbeschriebenes Blatt
Kallewaze eine Nachricht über ICQ schicken
Standard

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!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni


 

Aktuelle PHP Scripte

HeidiSQL - kostenloses MySQL front-end Editor für Windows ansehen HeidiSQL - kostenloses MySQL front-end Editor für Windows

HeidiSQL - ist ein Windows-Editor für die bekannt open Source Datenbank mySQL

10.12.2018 Berni | Kategorie: MYSQL/ Management
piwik Open-Source Webanalyse-Software ansehen piwik Open-Source Webanalyse-Software

piwik ist eine gute Alternative zu Google Analytics. Viele Features und ein modernes Erscheinungsbild mit aussagefähigen Statistiken in Echtzeit

10.12.2018 phpler | Kategorie: PHP/ Besucherzaehler
jQuery Mobile ansehen jQuery Mobile

Touch-Optimized Web Framework für Smartphones & Tablets

09.12.2018 phpler | Kategorie: AJAX/ Framework
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:28 Uhr.