Configurando o caminho de inclusão do PHP por site?
Pergunta
Posso definir o caminho de inclusão do PHP no php.ini
:
include_path = /path/to/site/includes/
Mas outros sites são afetados, então isso não é bom.
Posso definir o PHP include no início de cada arquivo:
$path = '/path/to/site/includes/';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
Mas isso parece uma má prática e confunde as coisas.
Então posso incluir isso e incluí-lo em cada arquivo:
include 'includes/config.php';
ou
include '../includes/config.php';
Isso é o que estou fazendo agora, mas o caminho de inclusão de config.php
mudará dependendo do que o inclui.
Existe uma maneira melhor?Isso importa?
Solução
Se você estiver usando o Apache como servidor web, poderá substituir (se permitir) as configurações usando .htaccess arquivos.Ver o manual do PHP para detalhes.
Basicamente você coloca um arquivo chamado .htaccess na raiz do seu site, que contém alguns PHP ini
valores.Desde que você tenha configurado o Apache para permitir substituições, este site usará todos os valores em sua configuração do PHP, + os valores que você especificar no .htaccess arquivo.
Pode ser usado apenas com
PHP_INI_ALL
ePHP_INI_PERDIR
diretivas de tipo
conforme indicado na página que vinculei.Se você clicar na listagem completa, verá que o caminho de inclusão é um PHP_INI_ALL
directiva.
Outras dicas
Erik Van Brakel deu, IMHO, uma das melhores respostas.
Além disso, se você estiver usando hosts Apache e virtuais, poderá configurar inclusões diretamente neles.Usando este método, você não precisará se lembrar de deixar os comandos php_admin em seu .htaccess.
Use um php.ini arquivo no site raiz, se sua configuração usar PHP como CGI (o caso mais frequente em hosts compartilhados) com a mesma sintaxe do servidor php.ini;Coloque dentro .htaccess
se você tiver PHP como módulo do Apache (faça um phpinfo()
se não tiver certeza):
php_value include_path "wherever"
Observe que por pasta php.ini does
não afeta subpastas.
Por que você acha que anexar para incluir o caminho é uma má prática?
Este código próximo ao topo do script raiz não deveria ser tão ruim assim...
$path = '/path/to/site/includes/';
set_include_path($path . PATH_SEPARATOR . get_include_path());
IMHO, a principal vantagem é que é portátil e compatível não apenas com Apache
EDITAR:Eu vi uma desvantagem deste método:pequeno impacto no desempenho.ver http://www.geeksengine.com/article/php-include-path.html
Dependendo de como o seu host está configurado, você pode ter permissão para colocar um php.ini
arquivo na raiz do seu diretório inicial com diretivas de configuração extras.
Sua aplicação deve ter um arquivo de configuração escrito em PHP.Em seguida, inclua isso com uma página relativa em cada página do programa.Esse arquivo de configuração terá uma variável para o caminho para o diretório de inclusão, diretório de modelos, diretório de imagens, etc.
Você pode definir include_path
no seu arquivo php.ini também.Eu sou um cara de Perl, então espero poder carregar inclusões e ter include
faça a coisa Certa.Eu tenho todos os meus include em um diretório específico, que é adicionado ao include_path
.Eu posso fazer coisas como
require_once "ClassName.php";
Não preciso me preocupar com caminhos relativos ou localizações de arquivos.
Eu também escrevi o meu próprio CustomRequire
fazer coisas como
function CustomRequire ($file) {
if(defined('MYINCLUDEPATH')) {
require_once MYINCLUDEPATH . "/$file";
} else {
require_once $file;
}
}
Dessa forma, posso alterar a forma como faço as inclusões posteriormente.Claro, você ainda precisa encontrar uma maneira de incluir seu código de inclusão :)