A resposta aceita por Pekka é incompleta e, em um contexto geral, enganosa. Se o arquivo for fornecido como um caminho relativo, a construção de linguagem chamada include
o pesquisará da seguinte maneira.
Primeiro, ele percorrerá os caminhos da variável de ambiente include_path
, que pode ser definida com ini_set
. Se isso falhar, ele pesquisará no próprio diretório do script de chamada dirname(__FILE__)
( __DIR__
com php> = 5.3.) Se isso também falhar, só então ele pesquisará no diretório de trabalho! Acontece que, por padrão, a variável de ambiente include_path
começa com .
, que é o diretório de trabalho atual. Essa é a única razão pela qual ele pesquisa primeiro no diretório de trabalho atual. Consulte http://php.net/manual/en/function.include.php .
Os arquivos são incluídos com base no caminho do arquivo fornecido ou, se nenhum for fornecido, o include_path especificado. Se o arquivo não for encontrado no include_path, o include irá finalmente verificar o próprio diretório do script de chamada e o diretório de trabalho atual antes de falhar.
Portanto, a resposta correta para a primeira parte da pergunta é que importa onde está localizado o script de chamada incluído. A resposta à última parte da pergunta é que o diretório de trabalho inicial , em um contexto de servidor web, é o diretório do script chamado, o script que inclui todos os outros enquanto é gerenciado pelo PHP. Em um contexto de linha de comando, o diretório de trabalho inicial é o que for quando o php é chamado no prompt, não necessariamente o diretório onde o script chamado está localizado. O diretório de trabalho atual , entretanto, pode ser alterado em tempo de execução com a função PHP chdir
. Consulte http://php.net/manual/en/function.chdir.php .
Este parágrafo é adicionado para comentar sobre outras respostas. Alguns mencionaram que confiar em include_path
é menos robusto e, portanto, é preferível usar caminhos completos, como ./path
ou __DIR__ . /path
. Alguns chegaram a dizer que confiar no .
próprio diretório de trabalho não é seguro, porque ele pode ser alterado. No entanto, algumas vezes, você precisa confiar nos valores do ambiente. Por exemplo, você pode desejar definir include_path
vazio, para que o diretório do script de chamada seja o primeiro lugar que ele pesquisará, mesmo antes do diretório de trabalho atual. O código pode já ter sido escrito e atualizado regularmente de fontes externas e você não deseja reinserir o prefixo __DIR__
cada vez que o código for atualizado.