Siga-nos em...
Follow us on Twitter Follow us on Facebook Watch us on YouTube
Registro

Alpha Servers
Resultados 1 a 1 de 1

Visão do Encadeamento

  1. #1



    Avatar de Renato
    Data de Ingresso
    Nov 2010
    Localização
    Imperyus
    Posts
    1.099
    Agradecido
    2533
    Agradeceu
    492
    Peso da Avaliação
    30

    Padrão Classe de leitura e escrita de settings.php

    Olá Imperyanos.

    Como o projeto Flame MU Web não será concluído, resolvi disponibilizar uma das classes que havia feito.

    A classe serve para ler e reescrever configurações do arquivo settings.php.

    Nas webs de MuOnline e em outras, de modo geral, feitas em PHP, normalmente as configurações são salvas em um arquivo PHP com a utilização de ARRAY e CONSTANTES.

    Essa classe lê esses dados e seus respectivos conteúdos, altera o que é necessário alterar e reescreve o arquivo com as novas configurações aplicadas.

    A classe foi construída com "tudo" se iniciando com um explode de $app->offsetSet, porque era assim que meu settings.php era feito. Contudo, com os ajustes necessários, ela pode ser utilizada em qualquer web.

    Com essa classe, é possível construir funções no painel de administrador e permitir que as configurações da WEB sejam alteradas diretamente pelo painel, sem a necessidade de acessar o arquivo settings.php do site. Uma mão na roda.

    Obviamente, o settings.php precisa ter permissão de leitura e escrita.

    Espero que aproveitem.

    Código PHP:
    <?php

    /**
     * @project Flame MU Web
     * @author Renato Valer
     * @package MuOnline\Service
     */

    namespace MuOnline\Service;

    class 
    settingsManagement
    {
        private 
    $file;
        private 
    $newfile;
        private 
    $content;
        private 
    $varsKeys = array();
        private 
    $constantsKeys = array();
        private 
    $constants = array();
        private 
    $vars = array();

        public function 
    __construct($file) {
            
    $this->file = $file;
            
    $this->newfile = $file.'.txt';
            
    copy($this->file, $this->newfile);
            
    $this->content = file_get_contents($this->newfile);
            
    $this->content = str_replace('<?php', '', $this->content);
            
    $this->content = trim($this->content);
            
    $this->content = preg_replace('%/\s*\*\s.*?\*/\s*%s', '', $this->content);
            
    $this->content = preg_replace('%(#|(//)).*%', '', $this->content);
            
    $this->saveConstants();
            
    $this->saveVars();
        }

        public function 
    getVars() {
            return 
    $this->vars;
        }

        public function 
    getConstants() {
            return 
    $this->constants;
        }

        public function 
    setVars($key, $value) {
            
    $this->vars[$key] = $value;
        }

        public function 
    setConstant($key, $value) {
            
    $this->constants[$key] = $value;
        }

        private function 
    saveVars() {
            
    $content = explode('$app->offsetSet', $this->content);
            
    array_shift($content);
            
    $vars = array();
            foreach(
    $content as $key => $value) {
                if(empty(
    trim($value))) {
                    continue;
                } else {
                    
    $split = preg_split("/\'([^\']*)\',/", $value, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
                    if (
    array_key_exists(1, $split)) {
                        
    $vars[] = $split[1];
                    }                
                }
            }
            
    $this->varsKeys = $vars;
        }

        private function 
    saveConstants() {
            
    $content = explode('define', $this->content);
            
    $constants = array();
            foreach(
    $content as $key => $value) {
                if(empty(
    trim($value))) {
                    continue;
                } else {
                    
    $split = preg_split("/\'([^\']*)\',/", $value, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
                    if (
    array_key_exists(1, $split)) {
                        
    $constants[] = $split[1];
                    }
                }
            }
            
    $this->constantsKeys = $constants;
        }

        private function 
    arrayToString($array) {
            
    $stringArray = "array(";
            
    $i = 1;
            
    $count = count($array);
            foreach(
    $array as $key => $value) {
                
    $c = $i++;
                if(
    is_array($value)) {
                    if(
    is_string($key)) {
                        
    $stringArray .= "'".$key."' => ".$this->arrayToString($value).")";
                    } else {
                        
    $stringArray .= $key." => ".$this->arrayToString($value).")";
                    }
                } else {
                    if(
    is_bool($value)) {
                        
    $value === true ? $bool = 'true' : $bool = 'false';
                        
    $stringArray .= "'".$key."' => ".$bool."";
                    } elseif(
    is_string($key)) {
                        
    $stringArray .= "'".$key."' => '".$value."'";
                    } else {
                        
    $stringArray .= $key." => '".$value."'";
                    }
                }
                if(
    $c < $count) {
                    
    $stringArray .= ", ";
                }
            }
            return 
    $stringArray;
        }

        public function 
    rewrite() {
            require(
    $this->file);
            
    $content = '<?php';
            foreach(
    $this->constantsKeys as $key => $value) {
                
    true === isset($this->constants[$value]) ? $val = $this->constants[$value] : $val = constant($value);
                if(
    is_bool($val)) {
                    
    $val === true ? $bool = 'true' : $bool = 'false';
                    
    $content .= sprintf("\r\n define('%s', %s);", $value, $bool);
                } elseif(
    is_null($value)) {    
                    
    $content .= sprintf("\r\n define('%s', %s);", $value, 'null');
                } else {
                    
    $content .= sprintf("\r\n define('%s', '%s');", $value, $val);
                }
            }
            foreach(
    $this->varsKeys as $key => $value) {
                
    true === isset($this->vars[$value]) ? $val = $this->vars[$value] : $val = $app->offsetGet($value);
                
    $content .= "\r\n $";
                
    $content .= "app->offsetSet('".$value."', ";
                if(
    is_array($val)) {
                    
    $content .= $this->arrayToString($val);
                    
    $content .= "));";
                } else {
                    
    $content .= $val."));";
                }
            }
            
    $content .= "\r\n\r\n";
            
    unlink($this->file);
            
    unlink($this->newfile);
            try {
                
    $fp = fopen($this->file, 'w+');
                
    fwrite($fp, $content);
                
    fclose($fp);
            } catch(\
    Exception $e) {
                return 
    $e->getMessage();
            }
        }    
    }
    Settings.php que utilizei (só para verem como era)
    Código PHP:

    <?php
    /*
        @Configuração do debug
        
        ATENÇÃO!
     
        Tome muito cuidado com essa configuração. 
        NUNCA USE o debug ativo em ambiente de produção, use apenas em ambiente de teste, 
        pois com debug ativo até mesmo a senha do banco de dados pode ser exposta.
    */

    define('DEBUG_MODE', true); // true or false

    /*
        @Configurações do banco de dados
    */
    define('DRIVER', 'sqlsrv');
    define('HOST', '(local)'); //Host do Banco de dados
    define('USER', 'sa'); //Login do Mssql
    define('PASSWORD', '1234'); //Senha do Mssql
    define('PORT', 1433); //Porta do Mssql
    define('DATABASE', 'MuOnline'); //Banco de dados do website
    define('DATABASE_ACCOUNTS', 'MuOnline'); //Banco de dados onde ficam as contas
    define('DATABASE_CHARACTERS', 'MuOnline'); //Banco de dados onde ficam os personagens

    /*
        @Configurações de templates
    */
    define('TEMPLATE', 'flamemuweb');
    define('TEMPLATE_CACHE', false);

    /*
        @Configurações primárias
    */
    define('TITLE_SITE', 'MuOnline Server - Logo do servidor.'); //Titulo - Nome do servidor
    define('SERVER_NAME', 'MuOnline Server'); //Nome do servidor
    define('SERVER_SLOGAN', 'Servidor 24 horas'); //Slogan do servidor
    define('SERVER_VERSION', 'Season 8.3'); //Versão do servidor
    define('SERVER_DROP', '20%'); //Drop do servidor
    define('SERVER_XP', '100x'); //Xp do servidor
    define('SERVER_BUGBLESS', 'Online'); //Bugbless status
    define('SHOPPING_LINK', '#LinkShop'); //Link do shopping
    define('CASH_NAME', 'Golds'); //Nome da moeda primeira moeda
    define('CASH_NAME2', 'Cashs'); //Nome da moeda segunda moeda
    define('POINTS_NAME', 'Pontos'); //Nome da moeda de ponto
    define('DISABLE_BASIC_INFOS', false); //Desligar a busca de: Total de contas, personagens, vips, contas e personagens banidos

    /*
        @Na linha abaixo, coloque:
        0 para Season 1 ou Abaixo - Sem DL
        1 para Season 1 ou Abaixo
        2 para Season 2
        3 para Season 3 Episodio
        4 para Season 3 Episodio 2, Até Season 5
        5 para Season 6
        6 para Season 6.2 ou acima
    */
    define('MUSERVER_VERSION', 5); //Veja como preencher na descrição acima.

    /*
        @Configurações de Tabelas e Colunas
    */
    $app->offsetSet('tables', array(
        
    'currency' => array(
            
    'table' => 'CashShopData', /* MEMB_INFO ou outra */
            
    'id' => 'AccountID', /* se for tabela MEMB_INFO, use memb___id */
            
    'currencies' => array(
                
    0 => array(
                    
    'name' => 'Gold',
                    
    'column' => 'WCoinC'
                
    ),
                
    1 => array(
                    
    'name' => 'Cash',
                    
    'column' => 'WCoinP'
                
    ),
                
    2 => array(
                    
    'name' => 'Point',
                    
    'column' => 'GoblinPoint'
                
    )
            )
        )
    ));

    /*
        @Configurações de Rankings
    */
    $app->offsetSet('rankings', array(
        array(
            
    0 => array(
                
    'name' => 'Level',
                
    'exibition' => array('Nome', 'Level', 'Resets'),
                
    'system' => array('table' => 'Character', 'columns' => array('Name', 'cLevel', 'ResetCount'), 'orderBy' => array('cLevel' => 'DESC', 'ResetCount' => 'DESC'))
            ),
            
    1 => array(
                
    'name' => 'Resets',
                
    'exibition' => array('Nome', 'Resets', 'Level'),
                
    'system' => array('table' => 'Character', 'columns' => array('Name', 'ResetCount', 'cLevel'), 'orderBy' => array('ResetCount' => 'DESC', 'cLevel' => 'DESC'))
            ),
            
    2 => array(
                
    'name' => 'Master Resets',
                
    'exibition' => array('Nome', 'Master Resets', 'Resets', 'Level'),
                
    'system' => array('table' => 'Character', 'columns' => array('Name', 'MasterResetCount', 'ResetCount', 'cLevel'), 'orderBy' => array('MasterResetCount' => 'DESC', 'ResetCount' => 'DESC', 'cLevel' => 'DESC'))
            )
        )
    ));

    /*
        @Configurações Cadastro
    */
    $app->offsetSet('register', array(
        
    'registerLogged' => false,
        
    'emailConfirm' => false,
        
    'emailRepeat' => false,
        
    'bonus' => array(
            
    'vip' => array(
                
    'active' => true,
                
    'type' => 1,
                
    'days' => 3
            
    ),
            
    'amount' => array(
                
    'zen' => 0,
                
    'currencies' => array(
                    
    0 => 0,
                    
    1 => 0,
                    
    2 => 0
                
    )
            ),
            
    'item' => array(
                
    'active' => false
            
    )
        )
    ));

    /*
        @Configurações Downloads
    */
    $app->offsetSet('downloads', array(
        array(
    'name' => 'Client Full', 'description' => 'Client completo', 'size' => '200Mb', 'link' => 'http://www.mediafire.com')
    ));

    $app->offsetSet('accountPlans', array(
        
    'free' => array('name' => 'Free'),
        
    'vips' => array(
            
    0 => array(
                
    'name' => 'Vip Silver',
                
    'active' => true,
                
    'prices' => array(
                    
    10 => 5,
                    
    20 => 10,
                    
    30 => 20
                
    )
            ),
            
    1 => array(
                
    'name' => 'Vip Gold',
                
    'active' => true,
                
    'prices' => array(
                    
    10 => 5,
                    
    20 => 10,
                    
    30 => 20
                
    )
            ),
            
    2 => array(
                
    'name' => 'Vip Diamante',
                
    'active' => true,
                
    'prices' => array(
                    
    10 => 5,
                    
    20 => 10,
                    
    30 => 20
                
    )
            ),
            
    3 => array(
                
    'name' => 'Vip Plus',
                
    'active' => true,
                
    'prices' => array(
                    
    10 => 5,
                    
    20 => 10,
                    
    30 => 20
                
    )
            )
        )
    ));
    Para utilizar, basta chamar a função construtora, informando o arquivo a ser editado, depois, por meio das funções setVars e SetConstant, modificar as variáveis/contantes que quiser e, por fim, chamar a função rewrite.

    Exemplo:

    Código PHP:
    <?php

    $settings 
    = new settingsManagement('settings/settings.php');

    // Exemplo de alteração de algumas constantes

    $settings->setConstant('DRIVER', 'sqlsrv');
    $settings->setConstant('HOST', '(local)');
    $settings->setConstant('USER', 'sa');
    $settings->setConstant('PASSWORD', '1234');
    $settings->setConstant('PORT', 1433);
    $settings->setConstant('DATABASE', 'MuOnline');
    $settings->setConstant('DATABASE_ACCOUNTS', 'MuOnline');
    $settings->setConstant('DATABASE_CHARACTERS', 'MuOnline');


    // Exemplo de alteração de array

    $settings->setVars('downloads', [
        [
    'name' => 'Client Full', 'description' => 'Client completo', 'size' => '200Mb', 'link' => 'http://www.mediafire.com']
    ]);

    $settings->rewrite();
    Simples, rápido e prático

    []'s
    Última edição por Renato; 18-02-2016 às 05:40 PM.
    Código PHP:
    <?php
        
    if(Weather::getState() == 'Rainy weather') {
            
    $this->removingLittleHorseFromRain();
        }

  2. Os Seguintes 9 Usuários Agradeceram você Renato Por este Post Útil:


 

 

Informações de Tópico

Usuários Navegando neste Tópico

Há 1 usuários navegando neste tópico. (0 registrados e 1 visitantes)

Tópicos Similares

  1. |Pedido| 3 Classe
    Por iDiedOficial no fórum Pedidos
    Respostas: 4
    Último Post: 03-05-2014, 10:06 AM
  2. |Release| MU Change Classe
    Por PowerX no fórum Downloads
    Respostas: 8
    Último Post: 09-04-2014, 06:01 PM
  3. |Desenvolvimento| Classe PDO multidriver
    Por Renato no fórum PHP
    Respostas: 6
    Último Post: 15-01-2014, 02:29 PM
  4. |Jobs/Query| Resete individual por classe
    Por marciosuti no fórum Jobs e Querys
    Respostas: 2
    Último Post: 08-09-2011, 09:14 AM
  5. |Dúvida| Classe de personagens
    Por Getulio no fórum CA | WebSites
    Respostas: 3
    Último Post: 26-11-2010, 05:27 PM

Marcadores

Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • Você não pode enviar respostas
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  •