Komm in unsere Facebook Gruppe

Willkommen Gast
Du bist nicht angemeldet, um alle Funktionen des Forums zu nutzen musst du dich registrieren und anmelden. Die Registrierung ist natürlich völlig kostenlos und kann jeder Zeit wiederrufen werden.

Aktuelle Zeit: 24. Mai 2012 16:44

[PHP] Config Editor

Das Forum für alle die ein Webinterface für ihre Gameserver schreiben wollen oder auf der suche nach einem Webinterface für ihren Server sind.


[PHP] Config Editor

Beitragvon Tobi am 8. Dez 2010 22:25

Beschreibung: Mit den Funktionen lässt sich praktisch jede Config Datei parsen und zum Bearbeiten als HTML Formular ausgeben. Über das Array $options wird angegeben wie die Config Datei auszusehen hat. Über die Funktion parse_config wird dann mit Hilfe von $options und einer Datei deren Inhalt in der Variable $config übergeben wird ein HTML Formular erstellt, wenn in $config nichts übergeben wird oder eine Option fehlt wird der Standard Wert aus $options verwendet. Die Funktion save_editor_config erstellt aus den Daten die das Formular der Funktion parse_config über $_POST zurück gibt wieder eine Config Datei.

Demo: games/counter-strike-source/config.html

Das Array wird als Vorlage für die Config Datei benötigt. Hier wird festgelegt wie die einzelnen Optionen heißen und welchen Typ ihr Wert besitzt.
Code: Alles auswählen
$options = array(
    'spacer'    => ' ',                //Wird zwischen der Option und dem wert angegeben, ' ' ergibt "option wert", '=' ergibt "option=wert"
    'line_end'    => "\n",           //Wird am Ende von jedem Eintrag verwendet, "\n" ergibt eine neue Zeile
    array(
        'name'        => 'Kategorie 1',
        'options'     => array(
            array(
                'value'            => 'option_in_config',
                'name'            => 'Name im Editor',
                'description'    => 'Beschreibung der Variable im Editor',
                'default'        => 'Standard Wert',
                'type'            => 'text',                // Einzeiliger Text
                'quote'            => true,                //Der Wert wird in der config Datei in Anfürungszeichen geschrienen (key="wert")
            ),

            array(
                'value'            => 'option_in_config',
                'name'            => 'Name im Editor',
                'description'    => 'Beschreibung der Variable im Editor',
                'default'        => 'Standard Wert',
                'type'            => 'textarea',                // Mehrzeiliger Text
            ),

            array(
                'value'            => 'option_in_config',
                'name'            => 'Name im Editor',
                'description'    => 'Beschreibung der Variable im Editor',
                'default'        => '',
                'type'            => 'password',            // Passwortfeld
            ),

        ),
    ),
    array(
        'name'        => 'Kategorie 2',
        'options'     => array(
            array(
                'value'            => 'option_in_config',
                'name'            => 'Name im Editor',
                'description'    => 'Beschreibung der Variable im Editor',
                'default'        => 0,
                'type'            => 'int',                // Ganzzahl
            ),

            array(
                'value'            => 'option_in_config',
                'name'            => 'Name im Editor',
                'description'    => 'Beschreibung der Variable im Editor',
                'default'        => 0,
                'type'            => 'select',            // Auswal Box
                'selects'        => array(
                    '0'        => 'Option1',                // 1. Option der Auswahlbox
                    '1'        => 'Option2',                // usw...
                ),
            ),

            array(
                'value'            => 'option_in_config',
                'name'            => 'Name im Editor',
                'description'    => 'Beschreibung der Variable im Editor',
                'default'        => 0,
                'type'            => 'bool',                // Checkbox, kann 0 oder 1 sein
            ),

        ),
    ),
);
 


Die Funktion parst den Inhalt einer Config Datei ($config) und gibt mit Hilfe des Arrays ($options) ein HTML Formular zum ändern der Datei zurück.
Code: Alles auswählen
/**
* Die Funktion erstellt ein HTML Formular aus einer Konfigurationsdatei
* @author Tobi <tobi.schaefer@gmail.com>
* @param array $options, text $config
* @return string HTML Form
*/
function parse_config($options, $config = '')
{
    $return = '';
    $var = preg_split("/" . $options['line_end'] . "/", $config);
    for($i = 0; isset($var[$i]); $i++)
    {
        $option = preg_split("/" . $options['spacer'] . "/", $var[$i], 2);
        if(isset($option[1]))
        {
            $set_config[$option[0]] = $option[1];
        }    
    
}
    $return .= '<form action ="" method="post">';
    for($i = 0; isset($options[$i]); $i++)
    {
        $return .= '<h3>' . $options[$i]['name'] . '</h3>';
        $return .= '<table style="width:100%;">';
        for($j = 0; isset($options[$i]['options'][$j]); $j++)
        {
            $set_option = isset($set_config[$options[$i]['options'][$j]['value']]) ? $set_config[$options[$i]['options'][$j]['value']] : $options[$i]['options'][$j]['default'];
            $checked = isset($set_config[$options[$i]['options'][$j]['value']]) ? ' checked="checked"' : '';
            $form_name = str_replace('.', '___PUNKT___', $options[$i]['options'][$j]['value']);
            $set_option = str_replace('"', '', $set_option);
            switch($options[$i]['options'][$j]['type'])
            {
                case 'text':
                    $form = '<input type="text" name="' . $form_name . '" value="' . $set_option . '" />';
                break;

                case 'password':
                    $form = '<input type="' . (($user->data['user_level'] == USERLEVEL_ADMIN || $user->data['user_level'] == USERLEVEL_MOD) ? 'text' : 'password') . '" name="' . $form_name . '" value="' . $set_option . '" />';
                break;

                case 'int':
                    $form = '<input size ="5" type="text" name="' . $form_name . '" value="' . $set_option . '" />';
                break;
                case 'textarea':
                    $form = '<textarea rows="4" cols="40" name="' . $form_name . '">' . $set_option . '</textarea>';
                break;
                case 'bool':
                    $_c0 = ($set_option == 0) ? ' checked="checked"' : '';
                    $_c1 = ($set_option == 1) ? ' checked="checked"' : '';
                    $form = '<input name="' . $form_name . '" value="1"' . $_c1 . ' type="radio" />Ja &nbsp; <input name="' . $form_name . '" value="0"' . $_c0 . ' type="radio" /> Nein';
                break;
                case 'select':
                    $form = '<select name="' . $form_name . '">';
                    foreach($options[$i]['options'][$j]['selects'] as $option => $val)
                    {
                        if($option == $set_option)
                        {
                            $form .= '<option selected="selected" value="' . $option . '">' . $val . '</option>';
                        }
                        else
                        
{
                            $form .= '<option value="' . $option . '">' . $val . '</option>';
                        }
                    }
                    $form .= '</select>';
                break;
            }
            $return .= '<tr><td style="width:25%"><b>' . $options[$i]['options'][$j]['name'] . '</b><br />' . $options[$i]['options'][$j]['description'] . '</td><td>' . $form . '</td><td style="width:50%;"><input' . $checked . ' type="checkbox" value="1" name="isactiv_' . $form_name . '" /> Aktiv</td></tr>';
        }
        $return .= '</table>';
    }
    $return .= '</form>';
    return $return;
}
 


Die Funktion erstellt aus den Daten die das Formular der Funktion parse_config sendet wieder eine Config Datei
Code: Alles auswählen
/**
* Die Funktion erstellt eine Config-Datei aus dem Formular das mit parse_config erzeugt wurde
* @author Tobi <tobi.schaefer@gmail.com>
* @param text $config; array $options
' @return string Config
*/
function save_editor_config($options)
{
    global $_POST;
    for($i = 0; isset($options[$i]); $i++)
    {
        for($j = 0; isset($options[$i]['options'][$j]); $j++)
        {
            if(isset($options[$i]['options'][$j]['quote']))
            {
                $quote[$options[$i]['options'][$j]['value']] = $options[$i]['options'][$j]['quote'];
            }
        }
    }
    $config_data = '';
    foreach($_POST as $var => $val)
    {
        if(($var <> 'submit_config_editor') && !strstr($var, 'isactiv_'))
        {

            $isactiv  = request_var('isactiv_' . $var, 0);
            if($isactiv)
            {
                $val = request_var($var, '');
                if(!ctype_digit($val))
                {
                    $val = '"' . $val . '"';
                }
                $var = str_replace('___PUNKT___', '.',$var);
                if(isset($quote[$var]) && !$quote[$var])
                {
                    $val = str_replace('"', '', $val);
                }
                $config_data .= $var . $options['spacer'] . $val . $options['line_end'];
            }
        }
    }
    return $config_data;
}
 


Zum Schluss noch ein paar Vorlagen für das $options Array. Die Arrays sind nicht unbedingt vollständig. Falls jemand selber Vorlagen schreiben und hier veröffentlichen will, bitte mir als PN schicken, dann füge ich sie hier ein.
Dateianhänge
mumble_options.php.tar
Vorlage für Murmur(Mumble)
(10 KiB) 71-mal heruntergeladen
css_options.php.tar
Vorlage für Counter Strike Source
(20 KiB) 115-mal heruntergeladen
cod4_options.php.tar
Vorlage für Call of Duty 4
(10 KiB) 80-mal heruntergeladen
bf1942_options.php.tar
Vorlage für Battlefield 1942
(10 KiB) 62-mal heruntergeladen
bf2_options.php.tar
Vorlage für Battlefield 2
(20 KiB) 71-mal heruntergeladen
Benutzeravatar
Tobi
Administrator
Administrator
[ Anbieter Profil ]
 
Beiträge: 1569
Registriert: 13. Sep 2004 15:11
Wohnort: Stuttgart

Re: [PHP] Config Editor

Beitragvon Hitman am 9. Dez 2010 17:41

Eieiejajajajaaeeiiii....

Da haust Du aber den Ball ganz weit nach vorne :D

Na ich nehm mal mitten drin was. Habe da eine vereinfachte Klasse zum packen von Dateien.
Die Classe habe ich glaube mal abgeleitet von nem riesen Funtions- und Class-Pack. ( Glaube sogar Tobi hat mich mal mit der Nase drauf geklatscht )
Die nutze ich überwiegend für zwei Sachen:

    - regelmäßiges packen der Logdateien ( von Interfaces ) bei einer bestimmten Größe oder per Cron monatlich
    - und mehrere Dateien zu packen, um die im Rutsch zu versenden z.B. per FTP

Hier der Code:
Code: Alles auswählen

<?php

class tar
{
 var 
$filename;
 var 
$filelist;

 function 
tar($filename)
 {
  
$this->filename=$filename;
  
$this->filelist=array();
 }

 function 
addfile($filename)
 {
  
$this->filelist[]=$filename;
 }

 function 
write()
 {

  
$tarfile=fopen($this->filename,"w");

  for (
$x=0;$x<count($this->filelist);$x++)
   {
    
$filename=$this->filelist[$x];
     while (
strlen($filename)<100$filename.=chr(0);

    
$permissions=sprintf("%o",fileperms($this->filelist[$x])).chr(0);
     while (
strlen($permissions)<8$permissions='0'.$permissions;

    
$userid=sprintf("%o",fileowner($this->filelist[$x])).chr(0);
     while (
strlen($userid)<8$userid='0'.$userid;

    
$groupid=sprintf("%o",filegroup($this->filelist[$x])).chr(0);
     while (
strlen($groupid)<8$groupid='0'.$groupid;

    
$filesize=sprintf("%o",filesize($this->filelist[$x])).chr(0);
     while (
strlen($filesize)<12$filesize='0'.$filesize;

    
$modtime=sprintf("%o",filectime($this->filelist[$x])).chr(0);
    
$checksum="";
     if (
is_dir($this->filelist[$x])) $indicator=5;
     else 
$indicator=0;

    
$linkname="";
     while (
strlen($linkname)<100$linkname.=chr(0);

    
$ustar="ustar  ".chr(0);
    
$user=posix_getpwuid(octdec($userid));
    
$user=$user['name'];
     while (
strlen($user)<32$user.=chr(0);

    
$group=posix_getgrgid(octdec($groupid));
    
$group=$group['name'];
     while (
strlen($group)<32$group.=chr(0);

    
$devmajor="";
     while (
strlen($devmajor)<8$devmajor.=chr(0);

    
$devminor="";
     while (
strlen($devminor)<8$devminor.=chr(0);

    
$prefix="";
     while (
strlen($prefix)<155$prefix.=chr(0);

    
$header=$filename.$permissions.$userid.$groupid.$filesize.$modtime.$checksum.$indicator.$linkname.$ustar.$user.$group.$devmajor.$devminor.$prefix;
     while (
strlen($header)<512$header.=chr(0);

    
$checksum=0;
     for (
$y=0;$y<strlen($header);$y++) $checksum+=ord($header[$y]);

    
$checksum=sprintf("%o",$checksum).chr(0).' ';
     while (
strlen($checksum)<8)

    
$checksum='0'.$checksum;
    
$header=$filename.$permissions.$userid.$groupid.$filesize.$modtime.$checksum.$indicator.$linkname.$ustar.$user.$group.$devmajor.$devminor.$prefix;
     while (
strlen($header)<512$header.=chr(0);

     
fwrite($tarfile,$header);
     if (
$indicator==0)
     {
      
$contentfile=fopen($this->filelist[$x],"r");
      
$data=fread($contentfile,filesize($this->filelist[$x]));
       while (
strlen($data)%512!=0$data.=chr(0);

       
fwrite($tarfile,$data);
     }
  }
  
fclose($tarfile);
  return 
true;
 }
}
?> 


Und dann habe ich da noch eine kurze Funktion zum anzeigen, von Datei Größen:

Code: Alles auswählen

<?php
function Dateigroesse($URL)
{
    
$Groesse=filesize($URL);
 
    if(
$Groesse 1000 && $Groesse 0) return "[".number_format($Groesse0","".")." Bytes]";
    elseif(
$Groesse==0) return " ";
    elseif(
$Groesse 1000000) return "[".number_format($Groesse/10240","".")." Kb]";
    else return 
"[".number_format($Groesse/10485760","".")." Mb]";
}
?>


MfG Hitman
Benutzeravatar
Hitman
Moderator
Moderator
 
Beiträge: 164
Registriert: 17. Mai 2005 18:30
Wohnort: Emden

Re: [PHP] Config Editor

Beitragvon Tobi am 9. Dez 2010 18:18

Falls du Linux auf deinen Servern verwendest, schau zwecks packen der Logfiles mal "logrotate" an ;)
Benutzeravatar
Tobi
Administrator
Administrator
[ Anbieter Profil ]
 
Beiträge: 1569
Registriert: 13. Sep 2004 15:11
Wohnort: Stuttgart

Re: [PHP] Config Editor

Beitragvon Hitman am 9. Dez 2010 18:46

Ja, ich benutze Linux.
Aber ich programmiere auch Interfaces für Systeme die kein echtes BS haben sondern nur eine Firmware, die spezifisch ähnliche Funktionen haben.
Was das für Systeme sind ist wohl nebensächlich, aber der Logrotate ist für Linux am sinnvollsten - da hast Du Recht werd ich gleich mal ausprobieren.

Dann noch ein kurzer Code, der eine MySQL-Datenbankverbindung aufbaut. ( Hab ich, glaube ich, auch von Dir :wink: )

Code: Alles auswählen

<?php

### Daten zur MySQL-Db-Verbindung ###
$server = "...";             // Datenbankserver ( Wenn auf dem gleichen Server ist dies "localhost" )
$user = "...";                // Datenbank User
$pass = "...";               // Datenbank Passwort
$datenbank = "...";       // Datenbank Name


### MySQL Datenbankverbindung ###
$conn = mysql_connect($server, $user, $pass);
mysql_select_db($datenbank, $conn);
if ($conn!=TRUE)
{
  echo "Verbindungsfehler: ".mysql_error()." !! Versuchen Sie es zu einem sp&auml;teren Zeitpunkt nochmals. Danke.";
  die;
}
?>


Dann noch eben ein Zahlen/ Buchstaben-Code Generator als Funktion:
Code: Alles auswählen

<?php
function randi_zahl
($zahl_laenge)
{
  $Buchstaben=array("A", "B", "C", "D", "E", "F", "G", "H", "K", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y");
  $Zahlen=array("2", "3", "4", "5", "6", "7", "8", "9");
  for($i=0, $Code=""; strlen($Code)<$zahl_laenge; $i++)
     {
        if(rand(0, 1)==&& isset($Buchstaben))
          {
             $Buchstabe=$Buchstaben[rand(0, count($Buchstaben))];
             $Code.=$Buchstabe;
             $AngezeigterCode.=$Buchstabe." ";
          }
     else  {
             $Zahl=$Zahlen[rand(0, count($Zahlen))];
             $Code.=$Zahl;
             $AngezeigterCode.=$Zahl." ";
          }
     }
  $AngezeigterCode=trim($AngezeigterCode);
 return $AngezeigterCode;
}
?>




MfG Hitman
Benutzeravatar
Hitman
Moderator
Moderator
 
Beiträge: 164
Registriert: 17. Mai 2005 18:30
Wohnort: Emden

Re: [PHP] Config Editor

Beitragvon Hitman am 9. Dez 2010 18:54

Hehe =) Tobi ist TAB-Fan
Benutzeravatar
Hitman
Moderator
Moderator
 
Beiträge: 164
Registriert: 17. Mai 2005 18:30
Wohnort: Emden

Re: [PHP] Config Editor

Beitragvon Terrorkarotte am 10. Dez 2010 23:38

Damit versalze ich gerne meine Passwörter, bevor sie in die Datenbank kommen:
Code: Alles auswählen

function passwordhash
($password,$username)
{
 $passworda = str_split($password,(strlen($password)/2)+1);
 $usernamea = str_split($username,(strlen($username)/2)+1);
 $hash = md5($usernamea[0].$passworda[0].$usernamea[1].$passworda[1]);
 return $hash;
}
 
Benutzeravatar
Terrorkarotte
Mitglied
Mitglied
 
Beiträge: 111
Registriert: 27. Feb 2010 09:59

Re: [PHP] Config Editor

Beitragvon Hitman am 15. Dez 2010 15:20

So nun habe ich noch etwas PHP-Code.
Mit Diesem kann man eine Datei "Spiegeln" - Hier habe ich es für einen Download genommen.

Zur Erklärung:
Es ist hier also z.B. möglich einen Ordner mit einer .htaccess-Datei zugriffsgeschützt zu machen, dass der direkte Download-Pfad nicht funktioniert.
Über PHP kann man mit dem Code eine angeforderte Datei spiegeln bzw. wird sie kopiert und über die Funktion header() bereitgestellt.

Der Code:

Code: Alles auswählen

<?php

#
# Der Funktion getimage() hab ich hier, zum Verständnis, einen statischen Pfad gegeben.
# Natürlich ist es hier möglich dynamische Pfade einzusetzen, etwa über eine Dateibaum-Suche oder über MySQL-Db-Abfrage.
#

function getimage ($image) 
{
 switch ($image) 
  
{
   case 'BEISPIEL':
    return '"PFAD/ZUM/ORDER"/BEISPIEL.zip'; // "PFAD/ZUM/ORDER" wird ersetzt mit dem Dateipfad- Hier nur ein Beispiel wie es aussehen könnte.
  }
}


#
# Der Haupt-Code geht davon aus, dass der Script das geforderte 'image' über den URL-Query mitschickt (z.B.: http://www.domain.de/index.php?image=DATEI)
#

if(isset($_GET['image'])) 
{
 header("Pragma: public"); 

 header
("Expires: 0"); 

 header
("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 

 header
("Cache-Control: private",false);

 header("Content-type: ". mime_content_type(pathinfo(getimage ($_GET['image']), PATHINFO_EXTENSION)) .";\n"); // Wenn die Funktion mime_content_type() nicht funktioniert nehmt getmimetype()

 header("Content-Transfer-Encoding: binary");

 $len = filesize(getimage ($_GET['image']));

 header("Content-Length: $len;\n");

 $outname = $_GET['image'].pathinfo(getimage ($_GET['image']), PATHINFO_EXTENSION);
 header("Content-Disposition: attachment; filename=\"$outname\";\n\n");
 readfile(getimage ($_GET['image']));
 exit;
}
?>


Zum vollem Umfang:
Wenn mann diesen PHP-Code mit einem Login und PHP-SESSION kombiniert, hätte man einen geschützten Downloadbereich, der auch moderierbar ist.
Welche Funktion es in meinen WIs einnimmt möchte ich ungern erläutern, denkt selber drüber nach - man kann schnell drauf kommen. :wink:

Noch eine Funktion
Code: Alles auswählen

<?php

#
# Die Funktion mime_content_type() ist erst ab PHP4.3.0 verfügbar - dann Braucht ihr die folgende Funktion nicht.
# Für den Fall das ersteres nicht zutrifft habe ich die MIME-Funktione, der Vollständigkeit halber, beigelegt.
#

function getmimetype ($extender
{
 
$extender strrchr($extender".");

 switch (
$extender
  {
   case 
".zip"$mime="application/zip"; break;
   case 
".exe"$mime="application/octet-stream"; break;
   case 
".tar"$mime="application/x-tar"; break;
   case 
".bmp"$mime="image/bmp"; break;
   case 
".gif"$mime="image/gif"; break;
   case 
".ief"$mime="image/ief"; break;
   case 
".jpeg"$mime="image/jpeg"; break;
   case 
".jpg"$mime="image/jpeg"; break;
   case 
".jpe"$mime="image/jpeg"; break;
   case 
".png"$mime="image/png"; break;
   case 
".tiff"$mime="image/tiff"; break;
   case 
".tif"$mime="image/tiff"; break;
   case 
".html"$mime="text/html"; break;
   case 
".htm"$mime="text/html"; break;
   case 
".css"$mime="text/css"; break;
   case 
".mpeg"$mime="video/mpeg"; break;
   case 
".mpg"$mime="video/mpeg"; break;
   case 
".mpe"$mime="video/mpeg"; break;
   case 
".qt":  $mime="video/quicktime"; break;
   case 
".mov"$mime="video/quicktime"; break;
   case 
".mxu"$mime="video/vnd.mpegurl"; break;
   case 
".avi"$mime="video/x-msvideo"; break;
   case 
".movie"$mime="video/x-sgi-movie"; break;
   case 
".asf"$mime="video/x-ms-asf"; break;
   case 
".asx"$mime="video/x-ms-asf"; break;
   case 
".wm":  $mime="video/x-ms-wm"; break;
   case 
".wmv"$mime="video/x-ms-wmv"; break;
   case 
".wvx"$mime="video/x-ms-wvx"; break;

  }
 return 
$mime;
}
?>
Benutzeravatar
Hitman
Moderator
Moderator
 
Beiträge: 164
Registriert: 17. Mai 2005 18:30
Wohnort: Emden

Re: [PHP] Config Editor

Beitragvon Terrorkarotte am 15. Dez 2010 18:09

Hier ist mein Gameserver Query Skript: zu finden, mit dem man verschiedenste Serverarten abfragen kann. Um genauer zu sein, alle, die Quakestat unterstützt:
http://www.ulrich-block.de/?p=825

Code: Alles auswählen
<?php
// Gameserverdaten
$ip="111.111.111.111";
$port="27015";
$server="$ip:$port";
// Die Spielart bestimmen. Die Manpage von quakestat erklärt Weiteres
$qstat="-a2s";
ob_start();
 // Der Safe Mode escaped von selber. Nicht jeder nutzt ihn, mit php6 wird er verschwinden. Also lieber selber escapen
 passthru(escapeshellcmd("/usr/bin/quakestat -xml -R $qstat $server"));
 $quakestring=ob_get_contents();
ob_end_clean();
// Aus dem XML String ein Array erstellen
$xml = simplexml_load_string($quakestring);
// Die Werte aus dem Array holen
$status=$xml->server[status];
$name=$xml->server->name;
$maxplayers=$xml->server->maxplayers;
$numplayers=$xml->server->numplayers;
// Geht bei HL2, welcher Wert im Array für andere genommen werden muss, mal selber testen
$gamename=$xml->server->rules->rule[2];
// Ein kleiner Output
echo "Server is $status";
echo "<br />$gamename";
echo "<br />Players: $numplayers/$maxplayers";
?>

Hier mal ein beispiel, wie ich das das Skript einsetze:
http://image-upload.de/image/sp59EK/c4eea24e22.jpg
Benutzeravatar
Terrorkarotte
Mitglied
Mitglied
 
Beiträge: 111
Registriert: 27. Feb 2010 09:59

Re: [PHP] Config Editor

Beitragvon Hitman am 20. Dez 2010 23:42

Hey Leute,

Mal so eine fixe Frage, hat jemand einen Script für eine whois-Abfrage von den RIPE-Datenbanken.
Hab einen fertig gemacht, der funktioniert aber nicht:
Code: Alles auswählen
  
<?php
  $domain 
= $_GET['GatComIP'];
   $server = "whois.nic.de";
   $result;

   if (!($fp = fsockopen($server, 43))) die('Could not connect to '.$server.'.');
   else fwrite($fp, $domain."\r\n");
   while (!feof($fp)) $result .= fread($fp, 1024).'<br>';
  fclose($fp);
  print($result);
?>


Bekomme vom Server, egal welche Domain ich eingebe, immer die Meldung:
Code: Alles auswählen
Domain: xxx.xx Status: invalid % DB time is 2010-12-20T23:35:00+01:00

Würde jetzt zwar tippen falscher Server....

MfG Hitman
Benutzeravatar
Hitman
Moderator
Moderator
 
Beiträge: 164
Registriert: 17. Mai 2005 18:30
Wohnort: Emden

Re: [PHP] Config Editor

Beitragvon hofi02 am 26. Mai 2011 13:38

Tobi hat geschrieben:Beschreibung: Mit den Funktionen lässt sich praktisch jede Config Datei parsen und zum Bearbeiten als HTML Formular ausgeben. Über das Array $options wird angegeben wie die Config Datei auszusehen hat. Über die Funktion parse_config wird dann mit Hilfe von $options und einer Datei deren Inhalt in der Variable $config übergeben wird ein HTML Formular erstellt, wenn in $config nichts übergeben wird oder eine Option fehlt wird der Standard Wert aus $options verwendet. Die Funktion save_editor_config erstellt aus den Daten die das Formular der Funktion parse_config über $_POST zurück gibt wieder eine Config Datei.

Demo: games/counter-strike-source.html#config

Das Array wird als Vorlage für die Config Datei benötigt. Hier wird festgelegt wie die einzelnen Optionen heißen und welchen Typ ihr Wert besitzt.
Code: Alles auswählen
$options = array(
    'spacer'    => ' ',                //Wird zwischen der Option und dem wert angegeben, ' ' ergibt "option wert", '=' ergibt "option=wert"
    'line_end'    => "\n",           //Wird am Ende von jedem Eintrag verwendet, "\n" ergibt eine neue Zeile
    array(
        'name'        => 'Kategorie 1',
        'options'     => array(
            array(
                'value'            => 'option_in_config',
                'name'            => 'Name im Editor',
                'description'    => 'Beschreibung der Variable im Editor',
                'default'        => 'Standard Wert',
                'type'            => 'text',                // Einzeiliger Text
                'quote'            => true,                //Der Wert wird in der config Datei in Anfürungszeichen geschrienen (key="wert")
            ),

            array(
                'value'            => 'option_in_config',
                'name'            => 'Name im Editor',
                'description'    => 'Beschreibung der Variable im Editor',
                'default'        => 'Standard Wert',
                'type'            => 'textarea',                // Mehrzeiliger Text
            ),

            array(
                'value'            => 'option_in_config',
                'name'            => 'Name im Editor',
                'description'    => 'Beschreibung der Variable im Editor',
                'default'        => '',
                'type'            => 'password',            // Passwortfeld
            ),

        ),
    ),
    array(
        'name'        => 'Kategorie 2',
        'options'     => array(
            array(
                'value'            => 'option_in_config',
                'name'            => 'Name im Editor',
                'description'    => 'Beschreibung der Variable im Editor',
                'default'        => 0,
                'type'            => 'int',                // Ganzzahl
            ),

            array(
                'value'            => 'option_in_config',
                'name'            => 'Name im Editor',
                'description'    => 'Beschreibung der Variable im Editor',
                'default'        => 0,
                'type'            => 'select',            // Auswal Box
                'selects'        => array(
                    '0'        => 'Option1',                // 1. Option der Auswahlbox
                    '1'        => 'Option2',                // usw...
                ),
            ),

            array(
                'value'            => 'option_in_config',
                'name'            => 'Name im Editor',
                'description'    => 'Beschreibung der Variable im Editor',
                'default'        => 0,
                'type'            => 'bool',                // Checkbox, kann 0 oder 1 sein
            ),

        ),
    ),
);
 


Die Funktion parst den Inhalt einer Config Datei ($config) und gibt mit Hilfe des Arrays ($options) ein HTML Formular zum ändern der Datei zurück.
Code: Alles auswählen
/**
* Die Funktion erstellt ein HTML Formular aus einer Konfigurationsdatei
* @author Tobi <tobi.schaefer@gmail.com>
* @param array $options, text $config
* @return string HTML Form
*/
function parse_config($options, $config = '')
{
    $return = '';
    $var = preg_split("/" . $options['line_end'] . "/", $config);
    for($i = 0; isset($var[$i]); $i++)
    {
        $option = preg_split("/" . $options['spacer'] . "/", $var[$i], 2);
        if(isset($option[1]))
        {
            $set_config[$option[0]] = $option[1];
        }    
    
}
    $return .= '<form action ="" method="post">';
    for($i = 0; isset($options[$i]); $i++)
    {
        $return .= '<h3>' . $options[$i]['name'] . '</h3>';
        $return .= '<table style="width:100%;">';
        for($j = 0; isset($options[$i]['options'][$j]); $j++)
        {
            $set_option = isset($set_config[$options[$i]['options'][$j]['value']]) ? $set_config[$options[$i]['options'][$j]['value']] : $options[$i]['options'][$j]['default'];
            $checked = isset($set_config[$options[$i]['options'][$j]['value']]) ? ' checked="checked"' : '';
            $form_name = str_replace('.', '___PUNKT___', $options[$i]['options'][$j]['value']);
            $set_option = str_replace('"', '', $set_option);
            switch($options[$i]['options'][$j]['type'])
            {
                case 'text':
                    $form = '<input type="text" name="' . $form_name . '" value="' . $set_option . '" />';
                break;

                case 'password':
                    $form = '<input type="' . (($user->data['user_level'] == USERLEVEL_ADMIN || $user->data['user_level'] == USERLEVEL_MOD) ? 'text' : 'password') . '" name="' . $form_name . '" value="' . $set_option . '" />';
                break;

                case 'int':
                    $form = '<input size ="5" type="text" name="' . $form_name . '" value="' . $set_option . '" />';
                break;
                case 'textarea':
                    $form = '<textarea rows="4" cols="40" name="' . $form_name . '">' . $set_option . '</textarea>';
                break;
                case 'bool':
                    $_c0 = ($set_option == 0) ? ' checked="checked"' : '';
                    $_c1 = ($set_option == 1) ? ' checked="checked"' : '';
                    $form = '<input name="' . $form_name . '" value="1"' . $_c1 . ' type="radio" />Ja &nbsp; <input name="' . $form_name . '" value="0"' . $_c0 . ' type="radio" /> Nein';
                break;
                case 'select':
                    $form = '<select name="' . $form_name . '">';
                    foreach($options[$i]['options'][$j]['selects'] as $option => $val)
                    {
                        if($option == $set_option)
                        {
                            $form .= '<option selected="selected" value="' . $option . '">' . $val . '</option>';
                        }
                        else
                        
{
                            $form .= '<option value="' . $option . '">' . $val . '</option>';
                        }
                    }
                    $form .= '</select>';
                break;
            }
            $return .= '<tr><td style="width:25%"><b>' . $options[$i]['options'][$j]['name'] . '</b><br />' . $options[$i]['options'][$j]['description'] . '</td><td>' . $form . '</td><td style="width:50%;"><input' . $checked . ' type="checkbox" value="1" name="isactiv_' . $form_name . '" /> Aktiv</td></tr>';
        }
        $return .= '</table>';
    }
    $return .= '</form>';
    return $return;
}
 


Die Funktion erstellt aus den Daten die das Formular der Funktion parse_config sendet wieder eine Config Datei
Code: Alles auswählen
/**
* Die Funktion erstellt eine Config-Datei aus dem Formular das mit parse_config erzeugt wurde
* @author Tobi <tobi.schaefer@gmail.com>
* @param text $config; array $options
' @return string Config
*/
function save_editor_config($options)
{
    global $_POST;
    for($i = 0; isset($options[$i]); $i++)
    {
        for($j = 0; isset($options[$i]['options'][$j]); $j++)
        {
            if(isset($options[$i]['options'][$j]['quote']))
            {
                $quote[$options[$i]['options'][$j]['value']] = $options[$i]['options'][$j]['quote'];
            }
        }
    }
    $config_data = '';
    foreach($_POST as $var => $val)
    {
        if(($var <> 'submit_config_editor') && !strstr($var, 'isactiv_'))
        {

            $isactiv  = request_var('isactiv_' . $var, 0);
            if($isactiv)
            {
                $val = request_var($var, '');
                if(!ctype_digit($val))
                {
                    $val = '"' . $val . '"';
                }
                $var = str_replace('___PUNKT___', '.',$var);
                if(isset($quote[$var]) && !$quote[$var])
                {
                    $val = str_replace('"', '', $val);
                }
                $config_data .= $var . $options['spacer'] . $val . $options['line_end'];
            }
        }
    }
    return $config_data;
}
 


Zum Schluss noch ein paar Vorlagen für das $options Array. Die Arrays sind nicht unbedingt vollständig. Falls jemand selber Vorlagen schreiben und hier veröffentlichen will, bitte mir als PN schicken, dann füge ich sie hier ein.



Ich bin noch relativ neu in sachen php. Ich versuche mir gerade ein kleines configurations-interface für meine Server zu Schreiben. Ist es möglich das so anzupassen dass es wahlweise auch dateien im inistyle format benutzen kann? Danke schonmal im voraus :mrgreen:

bsp. einer datei:
Code: Alles auswählen
[TeamDeathmatch]
Map00 = map1
Map01 = map2
Map02 = map3

[Deathmatch]
Map00 = map4
Map01 = map5
Map02 = map6

[Settings]
Password = irgendeinpw
ServerName = gameserver
hofi02
Neuling
Neuling
 
Beiträge: 2
Registriert: 26. Mai 2011 13:15
Wohnort: Dresden

Re: [PHP] Config Editor

Beitragvon Tobi am 12. Jun 2011 03:50

@hofi02:
Die Kategorien gäbe es ja in der Vorlage schon, man müsste eigentlich nur die beiden Funktionen anpassen. Ich werde das bei Gelegenheit mal machen und dann hier veröffentlichen.
Benutzeravatar
Tobi
Administrator
Administrator
[ Anbieter Profil ]
 
Beiträge: 1569
Registriert: 13. Sep 2004 15:11
Wohnort: Stuttgart

Re: [PHP] Config Editor

Beitragvon hofi02 am 17. Jun 2011 22:42

das wäre super :oops:
hofi02
Neuling
Neuling
 
Beiträge: 2
Registriert: 26. Mai 2011 13:15
Wohnort: Dresden


Zurück zu Gameserver Webinterface




Ähnliche Beiträge