Eu tenho uma estrutura de diretório como a seguinte;
script.php
inc / include1.php
inc / include2.phpobjects / object1.php
objects / object2.phpsoap / soap.php
Agora, eu uso esses objetos em ambos script.php
e /soap/soap.php
, poderia movê-los, mas quero a estrutura de diretório assim por um motivo específico. Ao executar script.php
o caminho de inclusão inc/include.php
e, ao executá- /soap/soap.php
lo ../inc
, os caminhos absolutos funcionam, /mnt/webdev/[project name]/inc/include1.php...
mas é uma solução feia se eu quiser mover o diretório para um local diferente.
Portanto, há uma maneira de usar caminhos relativos ou de gerar programaticamente o "/mnt/webdev/[project name]/"
?
DOCUMENT_ROOT
Você pode usar caminhos relativos. Experimente
__FILE__
. Esta é uma constante PHP que sempre retorna o caminho / nome do arquivo do script em que está. Portanto, emsoap.php
, você pode fazer:Outra solução seria definir um caminho de inclusão em seu arquivo httpd.conf ou .htaccess.
fonte
/
no início da expressão entre aspas, para separar o..
do nome do FILE .__DIR__
ao invés de ter que usardirname(__FILE__)
. (Documentos PHP)include dirname(__FILE__).'/../inc/include.php';
Não se esqueça do "/" antes do caminho relativo.Outra maneira de lidar com isso que elimina qualquer necessidade de inclusões é usar o recurso de carregamento automático. Incluir tudo o que seu script precisa "Just in Case" pode impedir o desempenho. Se as suas inclusões são todas as definições de classe ou interface e você deseja carregá-las apenas quando necessário, você pode sobrecarregar a
__autoload()
função com seu próprio código para encontrar o arquivo de classe apropriado e carregá-lo apenas quando for chamado. Aqui está o exemplo do manual:Contanto que você defina suas variáveis include_path de acordo, você nunca precisará incluir um arquivo de classe novamente.
fonte
dê uma olhada em http://au.php.net/reserved.variables
Acho que a variável que você está procurando é:
$_SERVER["DOCUMENT_ROOT"]
fonte
Você pode definir uma constante com o caminho para o diretório raiz do seu projeto e, em seguida, colocá-la no início do caminho.
fonte
Outra opção, relacionada ao Kevin, é usar
__FILE__
, mas em vez disso, substituir o nome do arquivo php de dentro dele:Estou usando isso há um tempo. O único problema é que às vezes você não tem
$_SERVER['SCRIPT_NAME']
, mas às vezes há outra variável semelhante.fonte
Achei que isso funcionou muito bem!
Usar:
fonte
Acho que a melhor maneira é colocar suas inclusões no caminho de inclusão de PHP. Existem várias maneiras de fazer isso, dependendo de sua configuração.
Então você pode simplesmente se referir a
de dentro de qualquer arquivo, independentemente de onde ele esteja, seja em seus arquivos incluídos ou acessíveis na web, ou em qualquer nível de subdiretórios aninhados.
Isso permite que você inclua arquivos fora da raiz do servidor da web, o que é uma prática recomendada.
por exemplo
Além disso, verifique __autoload para carregamento lento de arquivos de classe
http://www.google.com/search?q=setting+php+include+path
http://www.google.com/search?q=__autoload
fonte
Eu uso esta linha de código. Ele volta para o "topo" da árvore do site e depois vai para o arquivo desejado.
Por exemplo, digamos que eu tenha esta árvore de arquivos:
Posso incluir o arquivo functions.php de qualquer lugar, apenas copiando e colando
Se você precisar usar este código muitas vezes, pode criar uma função que retorna a
str_repeat('../',(substr_count(getenv('SCRIPT_URL'),'/')-1))
parte. Em seguida, basta inserir esta função no primeiro arquivo que você incluir. Eu tenho um arquivo "initialize.php" que incluo no topo de cada página php e que contém essa função. Na próxima vez que tiver que incluir arquivos, na verdade, apenas uso a função (nomeadapath_back
):fonte
Oh sim, absolutamente. Por exemplo, usamos uma única camada de subpastas, geralmente:
Você precisa ter cuidado ao confiar muito no caminho de inclusão em sites de muito tráfego, porque o php tem que procurar no diretório atual e em todos os diretórios no caminho de inclusão para ver se seu arquivo está lá e isso pode ficar lento coisas se você está sendo martelado.
Então, por exemplo, se você estiver fazendo MVC, você colocaria o caminho para o diretório do seu aplicativo no caminho de inclusão e, em seguida, especificaria referir-se a coisas no formulário
como queiras.
Mas, de modo geral, ele permite que você trabalhe com caminhos realmente curtos em seu PHP que funcionarão de qualquer lugar e é muito mais fácil de ler do que toda aquela malarkey raiz de documento de caminho real.
O benefício dessas alternativas baseadas em script que outros sugeriram é que elas funcionam em qualquer lugar, mesmo em caixas compartilhadas; definir o caminho de inclusão requer um pouco mais de reflexão e esforço, mas como mencionei, permite que você comece a usar __autoload, que é apenas o mais legal.
fonte
Se você for incluir um caminho específico na maioria dos arquivos em seu aplicativo, crie uma variável Global para sua pasta raiz.
Agora, esta variável global " APPLICATION_PATH " pode ser usada para incluir todos os arquivos ao invés de chamar realpath () toda vez que você incluir um novo arquivo.
EX:
Espero que ajude ;-)
fonte