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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top