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 :
define( 'SCRIPT_ROOT', __FILE__ );
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:
if( ! defined( 'SCRIPT_ROOT' ) ) {
define( 'SCRIPT_ROOT`, __FILE__ );
}
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
O script originalmente chamado é considerado um "arquivo incluído", portanto será listado junto com os arquivos referenciados por include e family.
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 isso realpath()
é desnecessário.