my_config.ini vs my_config.php
-
05-07-2019 - |
Pergunta
No trabalho usamos um arquivo .ini para variáveis ??set antes de chamar o resto do quadro (acho que vai
function getConfigVars(){
//read my_config.ini file
....
//call framework
}
e eu sempre me perguntei se havia um benefício para fazê-lo dessa forma.
Parece-me que você então tem que regras de acesso de gravação para impedir as pessoas de olhar para ele a partir da web e php tem que analisá-lo e compreendê-lo.
Então, por que usar my_config.ini em vez de my_config.php? Não é como qualquer um deve ser tocá-lo depois que ele é criado e parece mais conveniente para apenas chamar as variáveis ??e ser capaz de ter o seu IDE auto completar o texto onde quer que você está usando as variáveis ??ini / analisá-lo para erros.
Solução
O Zend Framework contém uma configuração parses que os arquivos Analisa que estão escritas no formato do ini ( Zend_Config_Ini ), parece que é isso que você está usando.
O arquivo de configuração não deve ser localizado na raiz do seu documento, e se ele não está na sua raiz de documentos, em seguida, não são necessárias regras re-escrita desde ninguém pode acessá-lo de qualquer maneira.
O formato INI é especializado para fornecer tanto a capacidade de ter uma hierarquia de chaves de dados de configuração e de herança entre seções de dados de configuração. hierarquias de dados de configuração são suportados, separando as chaves com o carácter de ponto ou ponto (.). Uma secção pode estender-se ou herdar de outra secção, seguindo o nome da secção com um caractere de dois pontos (:) e o nome da secção a partir da qual os dados estão a ser herdado.
A partir página Zend_Config_Ini .
O Zend Framework usa-lo para que você possa ter vários parâmetros de configuração, um para o estadiamento, um para o desenvolvimento e um para produção. Isso também permite configurações de banco de dados configuração fáceis para a produção e para o desenvolvimento e ter duas configurações muito diferentes. Diferentes caminhos configurado no arquivo ini para onde inclui estão localizados. Isso torna muito mais fácil para mover o código de desenvolvimento para a produção sabendo que imediatamente tudo o que é desenvolvimento será desligado.
Claro, isso seria possível com um script PHP, mas isso exigiria mais a análise das diversas variáveis ??de configuração, bem como fazer If / Then cheques, enquanto usando o parse_ini_file () faz tudo isso para você automaticamente.
As outras respostas também já assinalou que não-programadores pode precisar alterar variáveis ??e ou algo no site que é definido como uma variável de configuração (por exemplo, título do site que é usado no layout locais). arquivos INI são fáceis de entender e ler mesmo para alguém que nunca tenha programado antes.
Exemplo de um site que eu estou trabalhando atualmente em:
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
resources.db.adapter = "PDO_SQLITE"
resources.db.params.dbname = APPLICATION_PATH "/../data/db/users.db"
resources.view[] =
[staging : production]
[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.db.params.dbname = APPLICATION_PATH "/../data/db/users-testing.db"
[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.db.params.dbname = APPLICATION_PATH "/../data/db/users-dev.db
Isso torna extremamente fácil de ter vários conjuntos de dados para os vários ambientes em que o código pode ser executado.
Outras dicas
Para aqueles que vêm a esta pergunta, porque eles querem saber se existem diferenças de desempenho entre usar um arquivo INI que deve ser analisado e um arquivo PHP que é simplesmente incluído (e pode ser armazenado em cache pelo PHP): Sim, há diferenças, mas eles são tão pequeno que realmente não importa.
O meu cenário de referência é um arquivo config.ini
com 20 pares de chave / valor e um arquivo config.php
com os mesmos pares de 20 de chave / valor escritos como define. PHP versão é 5.4.9 no Ubuntu Linux 13.04.
key1 = value1
...
key20 = value20
vs.
<?php
define("key1", "value1");
...
define("key2", "value20");
scripts de teste Dois incluindo as configurações:
<?php
$CONF = parse_ini_file("config.ini");
vs.
<?php
require_once "config.php";
Eu testei o desempenho com ab -c 25 -n 10000
.
Resultado sem um cache de PHP:
ini: Requests per second: 2660.89 [#/sec] (mean)
php: Requests per second: 2642.28 [#/sec] (mean)
Resultado com cache do APC PHP:
ini: Requests per second: 3294.47 [#/sec] (mean)
php: Requests per second: 3307.89 [#/sec] (mean)
Eu corri os testes várias vezes, naturalmente, os números irão variar cada vez, mas o consenso é: config.ini
é um pouco mais rápido quando nenhum cache de PHP é usada, config.php
é um pouco mais rápido quando um cache PHP é usada. Mas a diferença é tão pequena que a decisão não deve ser baseada em desempenho.
Sua pergunta levanta um ponto justo, para ter certeza.
Alguns pontos a favor de arquivos .ini
:
-
Use o arquivo com outro idioma . Se você sempre quis ter um Perl, Python, Ruby, etc. roteiro fazer algo que é particularmente fácil a essa língua e necessário para o acesso as configurações do projeto você estaria fora da sorte se você armazenou suas configurações em um arquivo PHP.
-
Human edição de dados . Embora você demiti-lo na sua pergunta, intenções ou não é muito provável que alguém pode acabar cutucando lá e pode não ser uma pessoa técnica. O formato INI é muito menos assustador do que o código PHP, mesmo que seja apenas um monte de declarações de variáveis ??
-
Atualizando as definições . Eu acho que é muito mais fácil criar um novo arquivo INI em vez de escrever um arquivo PHP. Isso é muito subjetivo, no entanto, mas vale a pena mencionar.
-
Relação entre variáveis ??de ajuste . É bastante fácil / intuitiva para dar suas configurações de uma hierarquia com um arquivo INI. Enquanto isso também seria possível com PHP não é tão puro e pode ficar feio se você está tentando fazer arrays associativos profundamente aninhados para armazenar informações.
Além desses, a bater na INI de "ter para protegê-lo contra o acesso web" não é relevante na maioria dos cenários como a maioria dos projetos PHP (pelo menos os que eu sou parte de) manter uma boa quantidade de código afastado a partir da pasta de raiz, e as configurações normalmente ir lá.
Bem que poderia ser mais fácil para um não programador para modificar variáveis ??de configuração ... Se isso é necessário em seu local de trabalho.
Eu descobri colocação cuidadosa do <?php
e ?>
pode impedi-lo de que está sendo exibido, enquanto o parse_ini_file () ainda vai ter os dados relevantes a partir do arquivo.
A melhor maneira de garantir isso, porém, é colocá-lo acima do docroot, e negar o acesso a ini * em sua configuração do servidor.