Jump to content

Manipular ficheiro de configuração


soueu

Recommended Posts

Boas pessoal,

Estou desenvolvendo um Painel de Administração e me encontro na seguinte situação:

Código do Painel de Administração (config_geral.php):

<?php
require_once('../includes/SimpleConfig.php');
SimpleConfig::setFile('../includes/config.php');
$config = SimpleConfig::getInstance();
?>


<form method="post">
<h3>Informações Básicas</h3>
<p><b>URL Base:</b></p> <input type="text" name="Furl" class="username" placeholder="<?php echo $config['URL_Site']; ?>" />
<br><br>
<p><b>Email Site:</b></p> <input type="text" name="Fmail" class="username" placeholder="<?php echo $config['Email_Site']; ?>" />
<br><br>
<p><b>Registos:</b></p>
<br><input type="radio" name="Fregistos" value="ativados">Ativados<br><br><input type="radio" name="Fregistos" value="desativados">Desativados
<br><br><br>
<p><b>URL Atualizações:</b></p> <input type="text" name="Fatualizacao" class="username" placeholder="<?php echo $config['URL_Atualizacao']; ?>" />
<br><br>
<input type="submit" name="Fconfig" class="submit" value="Submeter" />
</form>

<?php
if(isset($_POST['Fconfig'])) {
$configphp = file_get_contents('../includes/config.php');

$configphp = preg_replace("/$config\['(Site_URL)', '[^']+?'\];/", "define('$1', '" . $_POST['Furl'] . "');", $configphp);
$configphp = preg_replace("/$config\['(Email_Site)', '[^']+?'\];/", "define('$1', '" . $_POST['Fmail'] . "');", $configphp);
$configphp = preg_replace("/$config\['(URL_Atualizacao)', '[^']+?'\];/", "define('$1', '" . $_POST['Fatualizacao'] . "');", $configphp);

$cphp = fopen('../includes/config.php', 'w');
fwrite($cphp, $configphp);
fclose($cphp);
}
?>

Código do Ficheiro de Configuração (config.php):

<?php
$config = array();
$config['Site_URL'] = 'http://localhost/projeto';
$config['Email_SITE'] = 'teste@localhost';

$config['Registo_ativado'] = True;
$config['URL_Atualizacao'] = 'https://localhost/projeto/update';

return $config;
?>

Ou seja, consigo visualizar os dados do ficheiro de configuração (config.php) perfeitamente. O problema está na hora de os editar... Por alguma razão os valores do ficheiro de configuração não estão a ser atualizados/substituídos com os do POST.

Alguma ajuda?

Obrigado desde já!

Link to comment
Share on other sites

Eu já tentei modificar o preg_replace de diversas formas, mas não estou conseguindo...

Acho que seria algo mais parecido com:

$configphp = preg_replace("/$config\('(Site_URL)', '[^']+?'\];/", "$config['$1', '" . $_POST['Furl'] . "'];", $configphp);

Mas assim obtenho o seguindo erro:

Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in C:\xampp\htdocs\pap\admin\config_geral.php on line 113

Linha 113 é a linha do preg_replace acima.

Link to comment
Share on other sites

Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in C:\xampp\htdocs\pap\admin\config_geral.php on line 113

Porque é que nunca leem o que os erros dizem? Por ser inglês?

O que o erro está a dizer é que a variável que estás a passar para essa função está vazia (unexpected T_ENCAPSED_AND_WHITESPACE) e que deveria conter algo (expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)).

  • Vote 1
Link to comment
Share on other sites

Esse pattern faz match no ficheiro? Não me parece...

Pelo que percebi queres trocar a forma de definir a configuração, em vez de array, trocar por constantes com DEFINE.

Porque complicar? Porque simplesmente não usas no ficheiro de origem DEFINE('SITE_URL', '{{site_url}}'); e depois substituis com str_replace('{{site_url}}', $site_url, $configphp);

Link to comment
Share on other sites

Porque complicar? Porque simplesmente não usas no ficheiro de origem DEFINE('SITE_URL', '{{site_url}}'); e depois substituis com str_replace('{{site_url}}', $site_url, $configphp);

Continua complicado .. é bem mais simples guardar a informação do $config num objecto que possa ser acedido sem ser instanciado (ou sem ser instanciado mais que uma vez), evitando sobrecarregar o sistema com constantes.

Outra sugestão :

<?php

return array(
  'site_url' => '...',
  'test' => '...'
);


Edited by yoda
Link to comment
Share on other sites

Continua complicado .. é bem mais simples guardar a informação do $config num objecto que possa ser acedido sem ser instanciado (ou sem ser instanciado mais que uma vez), evitando sobrecarregar o sistema com constantes.

Sobrecarregar o sistema com constantes??? Só se forem muitas mesmo mas isso não se sabe... e este assunto já é offtopic...

Se só é necessário uma configuração de 3 ou 4 valores que se possa usar em toda a aplicação, não se justifica colocar em variáveis... a melhor solução são constantes.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.