Pergunta

É uma boa prática inicializar seu aplicativo PHP. Encontrei duas maneiras de inicializar meu aplicativo PHP. Precisa de algumas sugestões que são uma maneira melhor.

Primeiro.
Defina uma constante para as estruturas da pasta

$controllerPath = 'controller';
define('CONTROLLER', str_replace('\\', '/', realpath($controllerPath)).'/');

//usage
require_once CONTROLLER . 'somecontroller.php';

Segundo
Usando ini_set Defina o caminho de incluir para a raiz do aplicativo

$rootPath = $_SERVER['DOCUMENT_ROOT'];
$includePath = ini_get('include_path');
ini_set('include_path', '.'.PATH_SEPARATOR.$rootPath.PATH_SEPARATOR.$includePath);

//usage
require_once 'controller/somecontroller.php';

Por favor, diga -me qual é a melhor maneira.

Em caso de um aplicativo de alta carga, que seria o melhor método?

Foi útil?

Solução

Use ini_set para defini -lo como o diretório -ver -seu aplicativo. É por isso que você pode usar as cordas literais em suas declarações de necessidade. Além disso, facilita o uso do código de reutilização

require 'coolapp/class/Model.php'
require 'coolapp/display/Router.php'
require 'spinoff/display/JsView.php'
// etc

É semelhante à idéia em java de ter importações totalmente qualificadas de com.whatever.app.more, ou como no Python, todas as importações de aplicativos devem ser absolutas em relação a esse aplicativo.

Ré: Aplicação de alta carga

A menos que você esteja carregando muitos milhares de arquivos, o tempo necessário para incluir arquivos provavelmente não é um pescoço de garrafa. Mas, se foi o caso, você tem algumas opções. Um é a APC, que armazena em cache os resultados de include em memória. Outra é carregar tudo a partir de um único arquivo, semelhante à maneira como os arquivos JavaScript são concatenados em um para melhor desempenho (coincidentemente, a APC tem uma função que fornece essas informações). APC é realmente fácil de configurar e é completamente transparente, para um impulso de ~ 50% melhor desempenho.

Outras dicas

Use melhor os caminhos absolutos do que deixar o PHP encontrar o arquivo em um dos caminhos incluídos incluídos.

Então, eu tende na primeira maneira usando uma constante que mantém o caminho absoluto para a raiz do aplicativo.

Isto é o que eu faço:

  • Coloque um diretório /inclua /inclua na parte superior da raiz do documento (ou como você quiser chamá -lo) para todas as classes, funções auxiliares e assim por diante;
  • Faça para que o diretório /incluir não seja servido usando mod_rewrite;
  • Tenha um arquivo chamado, digamos, setup.php, que configura parâmetros ini relevantes, caminhos, etc;
  • O arquivo é incluído em todas as páginas por caminho relativo; e
  • Todo o resto pode confiar nas configurações que criou.

Exemplo de reescrever regras para o nível superior .htaccess:

RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /include/
RewriteRule ^include/ - [R=404,L]

Eu posso estar um pouco fora. Eu não tenho minhas regras padrão à mão. Você notará que é um erro 404 que eu crio em vez de 403 (proibido). Isso é deliberado. Quando você faz login em um sistema, ele não diz "usuário desconhecido" ou "senha incorreta" porque isso lhe diz algo. Prefiro fingir que não havia /incluir diretório em nada, em vez de dizer que está lá, mas você simplesmente não pode olhar para ele.

Nesse ponto, você pode configurar tudo o que precisa para que o restante do seu código possa fazer:

require 'Class.php';

ou até definir um __autoload() Então isso acontece automaticamente.

Aqui está um exemplo do meu carregador de bootstrap:

if (!defined('APPLICATION_PATH')) {
    define('APPLICATION_PATH', realpath(getcwd() . '/../application'));
}

/**
 * Add the APPLICATION_PATH and the library dir to the include_path
 */
set_include_path(get_include_path() . PATH_SEPARATOR . APPLICATION_PATH . PATH_SEPARATOR . realpath(APPLICATION_PATH . '/../library'));

/**
 * Load the file loader to setup the class autoloader
 */
include_once 'Loader.php';
if (!class_exists('Loader')) {
    die('Could not load class loader.');
}

spl_autoload_register('Loader::autoload');

Eu pessoalmente iria com o segundo caminho. Aprendi a amar o Incluir_Path: provavelmente há algum desempenho atingido por procurar muitos diretórios, mas duvido que seja significativo. Também impede que os erros se esqueçam de incluir o caminho constante.

Em uma nota lateral, coloquei meus controladores, etc. em /application/, e ter algumas bibliotecas em /library/. Tudo isso vai acima da raiz da web. Ele impede que os usuários acessem esses arquivos, com os quais você deve tomar precauções se tiver tudo na raiz do documento. Se o seu host suportar isso (alguns hosts compartilhados não) aproveitam isso!

Atualizar

No caso de um aplicativo de alta carga, é bom ir com o segundo método ??

Na minha opinião, se você ficar de olho no que está em seu include_path (Por exemplo, na minha máquina de dev Windows, eu tenho todos os tipos de que não preciso: SQL Server, Ruby etc.) e deveriam retirar tudo o que não é necessário, o segundo método ficaria bem.

Outra coisa que você poderia fazer é despejar o include_path No final do script e codificá -lo no seu arquivo php.ini.

Realmente, no entanto. Eu não acho que isso será um gargalo no desempenho do seu sistema. Use o que é mais fácil para você.

Você tem problemas de desempenho em um site em que está executando ou é isso precaução? Eu posso ver por que você gostaria de pré -otimizar (tenho que me impedir de fazer isso), mas seriamente. Lidar com esses problemas quando eles surgirem. Quando você está na posição de sorte de ter um site popular, lidar com isso então. No final do dia, não é um pesadelo se você precisar substituir alguns requires.

Eu prefiro muito a segunda maneira - usei -o em um grande projeto de PHP e gostei muito.

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