PHP eigenes Configfile schreiben

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Christian Fenzl
    Lebende Foren Legende
    • 31.08.2015
    • 11249

    #1

    PHP eigenes Configfile schreiben

    Hallo hismastersvoice , Wörsty , svethi und andere PHP Programmierer da draußen!

    Wie würdet ihr heute "state-of-the-art" in PHP ein eigenes Configfile schreiben und lesen?
    Also nicht zwangsweise im ini-Style, sondern so, wie es am praktischten im PHP-Code zu handhaben ist?

    Zwecks Sample-Plugin in PHP, wie man dort seine Settings am einfachsten ablegt und ausliest.

    Lg Christian
    Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine
  • hismastersvoice
    Supermoderator
    • 25.08.2015
    • 7379

    #2
    Ich würde bei ini Struktur bleiben...
    PHP is a popular general-purpose scripting language that powers everything from your blog to the most popular websites in the world.


    So kann man die cfg für Perl und PHP nehmen.
    Kein Support per PN!

    Kommentar

    • svethi
      Lebende Foren Legende
      • 25.08.2015
      • 6342

      #3
      Wie parse schon sagt, wird damit aber nur gelesen. Wie schreibst Du die ini's?
      Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

      Kommentar

      • hismastersvoice
        Supermoderator
        • 25.08.2015
        • 7379

        #4
        ZB

        PHP-Code:
        
        function write_php_ini($array, $file)
        {
            $res = array();
            foreach($array as $key => $val)
            {
                if(is_array($val))
                {
                    $res[] = "[$key]";
                    foreach($val as $skey => $sval) $res[] = "$skey = ".(is_numeric($sval) ? $sval : '"'.$sval.'"');
                }
                else $res[] = "$key = ".(is_numeric($val) ? $val : '"'.$val.'"');
            }
            safefilerewrite($file, implode("\r\n", $res));
        }
        
        function safefilerewrite($fileName, $dataToSave)
        {    if ($fp = fopen($fileName, 'w'))
            {
                $startTime = microtime(TRUE);
                do
                {            $canWrite = flock($fp, LOCK_EX);
                   // If lock not obtained sleep for 0 - 100 milliseconds, to avoid collision and CPU load
                   if(!$canWrite) usleep(round(rand(0, 100)*1000));
                } while ((!$canWrite)and((microtime(TRUE)-$startTime) < 5));
        
                //file was locked so now we can store information
                if ($canWrite)
                {            fwrite($fp, $dataToSave);
                    flock($fp, LOCK_UN);
                }
                fclose($fp);
            }
        
        } 
        
        Zuletzt geändert von hismastersvoice; 13.12.2017, 21:11.
        Kein Support per PN!

        Kommentar

        • Christian Fenzl
          Lebende Foren Legende
          • 31.08.2015
          • 11249

          #5
          Probier ich aus, ob das failsafe genug ist, und wenn's gut ist (nehm ich an😉), Bau ich's direkt in die PHP Lib ein.
          Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

          Kommentar

          • svethi
            Lebende Foren Legende
            • 25.08.2015
            • 6342

            #6
            Ich habe auch mal irgend etwas von einem Modul Config::Lite gelesen
            Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

            Kommentar

            • hismastersvoice
              Supermoderator
              • 25.08.2015
              • 7379

              #7
              Ja gibt es... Ist ein Teil von Pear http://pear.php.net
              Kein Support per PN!

              Kommentar

              • Peter B
                MS Profi
                • 29.08.2015
                • 539

                #8
                Hmm Hab das gerade mit dem PHP parse_ini_file ausprobiert.

                Code:
                $ini_array = parse_ini_file("/opt/loxberry/config/system/general.cfg", true); //auch mit false probiert
                print_r($ini_array)
                und als Ausgabe bekomme Ich:

                Code:
                Array ( [NETWORK] => Array ( [IPADDRESS] => x.x.x.x [INTERFACE] => eth0 [TYPE] => dhcp [DNS] => x.x.x.x [SSID] => [MASK] => 255.0.0.0 [GATEWAY] => x.x.x.x ) [BINARIES] => Array ( [POWEROFF] => /sbin/poweroff [DATE] => /bin/date [AWK] => /usr/bin/awk [MAIL] => /usr/bin/mailx [CHMOD] => /bin/chmod [BZIP2] => /bin/bzip2 [GREP] => /bin/grep [NTPDATE] => /usr/sbin/ntpdate [CURL] => /usr/bin/curl [BASH] => /bin/sh [ZIP] => /usr/bin/zip [WGET] => /usr/bin/wget [REBOOT] => /sbin/reboot [GZIP] => /bin/gzip [SENDMAIL] => /usr/sbin/sendmail [SUDO] => /usr/bin/sudo [TAR] => /bin/tar [APT] => /usr/bin/apt-get [UNZIP] => /usr/bin/unzip ) [MINISERVER3] => Array ( [ADMIN] => admin [NOTE] => [IPADDRESS] => x.x.x.x [USECLOUDDNS] => 0 [NAME] => Testserver [PORT] => 80 [CLOUDURLFTPPORT] => [PASS] => pass [CLOUDURL] => ) [MINISERVER2] => Array ( [IPADDRESS] => x.x.x.x [ADMIN] => admin [NOTE] => [CLOUDURL] => [CLOUDURLFTPPORT] => [PORT] => 91 [PASS] => pass [USECLOUDDNS] => 0 [NAME] => Meli ) [BASE] => Array ( [LANG] => de [STARTSETUP] => 0 [INSTALLFOLDER] => /opt/loxberry [VERSION] => 0.2.3 [MINISERVERS] => 3 [CLOUDDNS] => dns.loxonecloud.com ) [TIMESERVER] => Array ( [METHOD] => miniserver [SERVER] => [ZONE] => Europe/Berlin ) [MINISERVER1] => Array ( [CLOUDURLFTPPORT] => [PASS] => pass [PORT] => 80 [NAME] => Peter [USECLOUDDNS] => 0 [CLOUDURL] => [IPADDRESS] => x.x.x.x [NOTE] => [ADMIN] => admin ) )
                aber wie komme Ich das jetzt an die Daten z.B.: Name von Miniserver3?
                Zuletzt geändert von Peter B; 25.12.2017, 16:07.

                Kommentar

                • svethi
                  Lebende Foren Legende
                  • 25.08.2015
                  • 6342

                  #9
                  $ini_array['MINISERVER3']['NAME']
                  Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

                  Kommentar

                  • Peter B
                    MS Profi
                    • 29.08.2015
                    • 539

                    #10
                    Danke svethi hab schon viele Varianten probiert nur die nicht ;-)

                    Kommentar

                    • Liver_64
                      MS Profi
                      • 07.09.2015
                      • 606

                      #11
                      ich würde auch bei der "parse_ini_file" Variante bleiben
                      Anmerkung: Bitte keine Fragen mehr per PN sondern direkt im Forum damit andere mithelfen und mitprofitieren können.
                      Bzgl. Sonos Plugin supporte ich nur noch die jeweils aktuelle Version NUR auf dem LoxBerry, ich kann keine VM Unterstützung mangels Hardware geben. Herzlichen Dank!

                      Kommentar

                      • svethi
                        Lebende Foren Legende
                        • 25.08.2015
                        • 6342

                        #12
                        Ich habe jetzt erst Config:Lite verwendet. Das geht gut. parse_ini_file kann ja nur lesen.
                        Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

                        Kommentar

                        • Christian Fenzl
                          Lebende Foren Legende
                          • 31.08.2015
                          • 11249

                          #13
                          svethi Config:Lite liefern wir jetzt ja mit.
                          Kannst du einen kurzen Wiki-Artikel im PHP-Bereich schreiben, wie man's einbindet und worauf man aufpassen muss.

                          Die general.cfg als *Plugin* zu beschreiben ist übrigens tabu, nur um das explizit in Erinnerung zu rufen :-)

                          Mir ging's ja explizit ums Schreiben, weil ein Plugin ja vielleicht auch eine Config hat (zumindest hab ich kein einziges Perl-Plugin ohne eigenes Configfile).
                          Zuletzt geändert von Christian Fenzl; 06.01.2018, 18:27.
                          Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

                          Kommentar

                          • svethi
                            Lebende Foren Legende
                            • 25.08.2015
                            • 6342

                            #14
                            Muss ich mal sehen. Bin nicht so ein Schreiberling ;-) bekomme ich aber sicher hin.
                            Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

                            Kommentar


                            • Christian Fenzl
                              Christian Fenzl kommentierte
                              Kommentar bearbeiten
                              Schreibs kurz und technisch, und ich mach eine Doku daraus :-)
                              Ich bin hauptsächlich Schreiberling :-)
                          Lädt...