Como você inclui um arquivo com mais de 2 diretórios de volta. Eu sei que você pode usar ../index.php
para incluir um arquivo com 2 diretórios de volta, mas como você faz isso para 3 diretórios de volta? Isso faz sentido? Eu tentei, .../index.php
mas não está funcionando.
Eu tenho um arquivo /game/forum/files/index.php
e ele usa PHP include para incluir um arquivo. Que está localizado em /includes/boot.inc.php
; /
sendo o diretório raiz.
php
include
filesystems
hakre
fonte
fonte
Respostas:
..
seleciona o diretório pai do atual. Claro, isso pode ser encadeado:Isso seria dois diretórios acima.
fonte
define
seria usado aqui, mas (1) essa não era nem remotamente a questão aqui. E (2) você ainda usaria um caminho relativo em seudefine
, a menos que você realmente codifique todo o caminho absoluto do servidor e eu me absteria disso, uma vez que tem apenas desvantagens. Ou (a terceira alternativa) você poderia usar a manipulação de strings para extrair o diretório pai do caminho atual (expandido), mas mais uma vez isso não tem nenhuma vantagem em usar caminhos relativos./../
pode funcionar ou../
pode funcionar, ou nenhum dos dois pode funcionar em três computadores diferentes com exatamente a mesma configuração de ambiente../
e../../
(nota: sem barra inicial!), Funciona em todos os sistemas operacionais modernos. É usado para não funcionar em Windows e ( muito tempo atrás) Macintosh mas agora trabalha em todos os lugares, e tem, pelo menos nos últimos anos dez. Se não funcionar em algum lugar, o motivo é que a estrutura do arquivo é diferente e / ou você está em um diretório de trabalho diferente. Mas não está relacionado a este código./../
vez de../
em seu ambiente./../
simplesmente não faz sentido em nenhum sistema (é equivalente a/
, ou um erro). Tem certeza de que não está colando nada na frente dele?Para incluir um arquivo em um diretório anterior, use
'../file'
. Para dois diretórios de volta, use'../../file'
. E assim por diante.Embora, realisticamente, você não deva realizar inclusões em relação ao diretório atual. E se você quisesse mover esse arquivo? Todos os links seriam quebrados. Uma forma de garantir que você ainda possa vincular a outros arquivos, enquanto mantém esses links se mover o arquivo, é:
DOCUMENT_ROOT
é uma variável de servidor que representa o diretório base no qual seu código está localizado.fonte
Assim,
../
você recebe um diretório de volta, não dois .Corrente
../
quantas vezes forem necessárias para subir 2 ou mais níveis.fonte
é sua melhor aposta aqui e evitará a maioria dos bugs de caminho relativo que você pode encontrar com outras soluções.
Na verdade, isso forçará a inclusão a ser sempre relativa à posição do script atual onde esse código está colocado (cujo local é mais provavelmente estável, já que você define a arquitetura de seu aplicativo). Isso é diferente de apenas fazer o
include '../../index.php'
que incluirá relativamente ao script em execução (também denominado "chamando") e, em seguida, relativamente ao diretório de trabalho atual , que apontará para o script pai que inclui seu script, em vez de resolver a partir do caminho do script incluído .Da documentação do PHP:
E a postagem mais antiga que encontrei citando esse truque data de 2003, de Tapken .
Você pode testar com a seguinte configuração:
Crie um layout como este:
Em
parent.php
, coloque:Em
sub/included.php
, coloque:Resultado ao acessar
parent.php
:Como podemos ver, no primeiro caso, o caminho é resolvido a partir do script de chamada
parent.php
, enquanto usando odirname(__FILE__).'/path'
truque, a inclusão é feita a partir do scriptincluded.php
onde o código está colocado.Cuidado, o seguinte NÃO é equivalente ao truque acima, ao contrário do que pode ser lido em outro lugar:
Na verdade, prefixar
/
funcionará, mas resolverá exatamente comoinclude ../../index.php
no script de chamada (a diferença é queinclude_path
não será verificado depois se falhar). Do documento PHP :fonte
..
meio do caminho (relativo / absoluto)...
é usado no meio do include. sempre deve ser a primeira parte de include../
é um diretório, Repita para dois../../
ou até três diretórios :../../../
e assim por diante.Definir constantes pode reduzir a confusão porque você irá detalhar os diretórios versos para trás
Você pode definir algumas constantes como:
Ao usar 'BD' ou meu 'diretório base' parece assim:
definir(); referência
fonte
fonte
Cada instância de
../
significa subir / voltar um diretório.fonte
a seguir estão as maneiras de acessar seus diferentes diretórios: -
fonte
Você pode fazer
../../directory/file.txt
- Isso vai dois diretórios para trás.../../../
- isso vai três. etcfonte
fonte
Mas tenha MUITO cuidado ao permitir que o usuário selecione o arquivo. Você realmente não deseja permitir que eles obtenham um arquivo chamado, por exemplo,
ou outros arquivos de sistema sensíveis.
(Desculpe, já faz um tempo desde que eu era um administrador de sistema Linux, e acho que este é um arquivo sensível, pelo que me lembro)
fonte
fonte
Eu recomendo usar
__DIR__
para especificar o diretório do arquivo php atual . Verifique aqui o motivo.fonte
se você estiver usando php7, você pode usar a função dirname com o parâmetro de nível 2, por exemplo:
o segundo parâmetro "2" indica quantos níveis acima
dirname referance
fonte
incluindo diretórios pode ser processado por arquivo proxy
..... | _proxy.php
fonte
Experimente
../../
. Você pode modificá-lo de acordo, pois ele retornará dois diretórios. Primeiro acesse o diretório raiz e, em seguida, acesse o diretório necessário.Por exemplo, você está dentro
root/inc/usr/ap
e há outro diretórioroot/2nd/path
. Você pode acessar opath
diretórioap
desta forma:../../2nd/path
primeiro vá para a raiz do diretório desejado. Se não estiver funcionando, por favor, compartilhe.fonte
se você incluir
/
no início da inclusão, a inclusão será considerada como o caminho da raiz do site.se o seu site for http://www.example.com/game/forum/files/index.php, você pode adicionar uma inclusão a /includes/boot.inc.php que resultaria em http://www.example.com /includes/boot.inc.php .
Você deve ter cuidado com o
..
traversal, pois alguns servidores web o têm desativado; também causa problemas quando você deseja mover seu site para uma nova máquina / host e a estrutura é um pouco diferente.fonte
Tente isto
este exemplo é um diretório de volta
este exemplo é dois diretórios de volta
fonte
Eu vi suas respostas e usei incluir caminho com sintaxe
e o servidor http (Apache 2.4.3) retornou o erro interno 500.
Quando mudei o caminho para
tudo está bem.
fonte