Eu pesquisei alto e baixo e obtive muitas soluções e variáveis diferentes contendo informações para obter o caminho absoluto. Mas eles parecem funcionar sob algumas condições e não sob outras. Existe uma maneira de obter o caminho absoluto do script executado no PHP? Para mim, o script será executado a partir da linha de comando, mas uma solução deve funcionar tão bem se executada no Apache etc.
Esclarecimento: O script executado inicialmente, não necessariamente o arquivo em que a solução está codificada.
Respostas:
A solução correta é usar a
get_included_files
função:Isso fornecerá o caminho absoluto do script inicial, mesmo que:
Aqui estão dois scripts de teste; o script principal e um arquivo incluído:
E o resultado; observe o diretório atual:
fonte
get_included_files()
. Eu sugiro a loja__FILE__
em uma constante no início do script feito para ser executado inicialmente.__FILE__
constante fornecerá o caminho absoluto para o arquivo atual.Atualização :
A pergunta foi alterada para perguntar como recuperar o script executado inicialmente em vez do script em execução no momento. A única maneira confiável de fazer isso é usar a
debug_backtrace
funçãofonte
__FILE__
retornar a localização do index.php ou a localização do arquivo incluído? Como obteria a localização do index.php?__FILE__
aponta para o caminho do script atual. Mas não encontrei nada para mostrar o caminho atual do index.php.A resposta foi movida para aqui - https://stackoverflow.com/a/26944636/2377343
fonte
str_replace( basename(__FILE__) , '',str_replace($_SERVER["DOCUMENT_ROOT"],'',str_replace('\\','/',__FILE__ ) ) ) === /folder1/folder2/
Se você colocar isso em um arquivo incluído, ele imprimirá o caminho para essa inclusão. Para obter o caminho do script pai, substitua
__FILE__
por$_SERVER['PHP_SELF']
. Mas esteja ciente de que o PHP_SELF é um risco à segurança!fonte
__FILE__
sempre contém um caminho absoluto com links simbólicos resolvidos, enquanto nas versões mais antigas ele continha um caminho relativo em algumas circunstâncias." plus "dirname () opera ingenuamente na string de entrada e não está ciente do sistema de arquivos real ou dos componentes do caminho como '..'. 'PHP_SELF
?Do manual :
Nota :
__DIR__
foi adicionado no PHP 5.3.0.fonte
Se você deseja obter o diretório de trabalho atual, use
getcwd()
http://php.net/manual/en/function.getcwd.php
__FILE__
retornará o caminho com o nome do arquivo, por exemplo, no XAMPP, emC:\xampp\htdocs\index.php
vez deC:\xampp\htdocs\
fonte
fornecerá a rota absoluta do arquivo atual do qual você está exigindo a rota, a rota do diretório do servidor.
arquivos de exemplo:
www / http / html / index.php; se você colocar esse código dentro do seu index.php, ele retornará:
<?php echo dirname(__FILE__); // this will return: www/http/html/
www / http / html / class / myclass.php; se você colocar esse código dentro do myclass.php, ele retornará:
<?php echo dirname(__FILE__); // this will return: www/http/html/class/
fonte
Basta usar abaixo:
fonte
a.php->b.php->c.php
deve ser o caminho de a.php se marcada em c.php . A única maneira que parece confiável é usar a função debug_backtrace () .fornece o diretório de script atual (o script no qual você colocou esse código) sem barra final. isso é importante se você deseja incluir outros arquivos com o resultado
fonte
Se você está procurando o caminho absoluto em relação à raiz do servidor, descobri que isso funciona bem:
fonte
Aqui está uma função PHP útil que escrevi para isso com precisão. Como a pergunta original esclarece, ela retorna o caminho a partir do qual o script inicial foi executado - e não o arquivo em que estamos atualmente.
fonte
tente isso no seu script
fonte
Para o script executado no servidor da web
$_SERVER['SCRIPT_FILENAME']
, o caminho completo para o script inicialmente chamado será contido, provavelmente o seu index.php.realpath()
não é necessário neste caso.Para o script, a execução no console
$_SERVER['SCRIPT_FILENAME']
conterá um caminho relativo para o script inicialmente chamado do seu diretório de trabalho atual. Portanto, a menos que você altere o diretório de trabalho dentro do seu script, ele será resolvido para o caminho absoluto.fonte
É isso que eu uso e funciona em ambientes Linux. Eu não acho que isso funcionaria em uma máquina Windows ...
fonte
Uma maneira simples de ter o caminho absoluto do roteiro executada inicialmente , em que o script e qualquer outro script incluído com
include
,require
,require_once
é usando um constante e armazenar lá o caminho do script atual no início do script principal :A solução acima é adequada quando existe um único script "principal" que
include
é todo script necessário, como na maioria dos aplicativos da Web.Se esse não for o caso, e pode haver vários "scripts intitais", para evitar redefinições e ter o caminho correto armazenado dentro da constante em que cada script pode começar:
Uma observação sobre a resposta (atualmente) aceita :
a resposta afirma que o caminho do script executado inicialmente é o primeiro elemento da matriz retornado por
get_included_files()
.Esta é uma solução inteligente e simples e, no momento da escrita, (estamos quase no PHP 7.4.0), ela funciona .
No entanto, observando a documentação, não há menção de que o script inicialmente executado seja o primeiro item da matriz retornada por
get_included_files()
.Nós lemos apenas
No momento da escrita, o " script originalmente chamado " é o primeiro da matriz, mas - tecnicamente - não há garantia de que isso não mude no futuro.
A cerca de nota
realpath()
,__FILE__
e__DIR__
:Outros sugeriram em suas respostas o uso de
__FILE__
,__DIR__
,dirname(__FILE__)
,realpath(__DIR__)
...dirname(__FILE__)
é igual a__DIR__
(introduzido no PHP 5.3.0), então apenas use__DIR__
.Ambos
__FILE__
e__DIR__
sempre são caminhos absolutos, por issorealpath()
é desnecessário.fonte