Resumo : neste tutorial, você aprenderá como usar a __DIR__
constante mágica do PHP ao incluir um arquivo PHP.
Introdução à __DIR__
constante mágica do PHP
O PHP 5.3 introduziu uma nova constante mágica chamada __DIR__
. Quando você faz referência a __DIR__
dentro de um arquivo, ele retorna o diretório do arquivo. O __DIR__
não inclui uma barra final, por exemplo, /
ou \
exceto que é um diretório raiz.
Quando você usa __DIR__
dentro de um include, __DIR__
retorna o diretório do arquivo incluído.
Tecnicamente falando, o __DIR__
é equivalente ao dirname(__FILE__)
. No entanto, usar o __DIR__
é mais conciso que o dirname(__FILE__)
.
PHP simples __DIR__exemplo
Suponha que você tenha a seguinte estrutura de diretórios:
.
├── inc
│ ├── footer.php
│ └── header.php
└── index.php
Linguagem de código: CSS ( css )
Contém header.php
o código da parte do cabeçalho:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PHP __DIR__ Demo</title>
</head>
<body>
Linguagem de código: PHP ( php )
Contém footer.php
o código da parte do rodapé. Também mostra o valor da __DIR__
constante:
<p><?php echo __DIR__ ?></p>
</body>
</html>
Linguagem de código: PHP ( php )
O index.php inclui arquivos header.php
e footer.php
. Também mostra o valor da __DIR__
constante:
<?php require 'inc/header.php' ?>
<h1>Home</h1>
<p><?php echo __DIR__ ?></p>
<?php require 'inc/footer.php' ?>
Linguagem de código: PHP ( php )
O seguinte mostra a saída no navegador da web:
Home
C:\xampp\htdocs\web
C:\xampp\htdocs\web\inc
Linguagem de código: PHP ( php )
O __DIR__
in the index.php
retorna o diretório atual do index.php
C:\xampp\htdocs\web
enquanto o __DIR__
in the footer.php
file retorna o diretório do footer.php
arquivo C:\xampp\htdocs\web\inc
.
Por que usar PHP__DIR__
Suponha que você tenha um projeto com a seguinte estrutura de diretórios:
.
├── admin
│ └── dashboard
│ └── index.php
├── config
│ └── app.php
├── inc
│ ├── footer.php
│ └── header.php
└── public
└── index.php
Linguagem de código: CSS ( css )
Contém config/app.php
a configuração do aplicativo:
<?php
define('APP_NAME', 'My Awesome App');
Linguagem de código: PHP ( php )
Contém header.php
a parte do cabeçalho de uma página. Também inclui o config/app.php
arquivo e usa a APP_NAME
constante:
<?php require '../config/app.php' ?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?php echo APP_NAME ?></title>
</head>
<body>
Linguagem de código: PHP ( php )
Contém footer.php
as tags de fechamento dos elementos body
e html
:
</body>
</html>
Linguagem de código: PHP ( php )
O public/index.php
arquivo inclui os arquivos header.php
e footer.php
:
<?php require '../inc/header.php' ?>
<h1>Home</h1>
<?php require '../inc/footer.php'?>
Linguagem de código: PHP ( php )
Se você navegar até o http://localhost/web/public/index.php
, verá a seguinte saída ao visualizar a origem da página:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My Awesome App</title>
</head>
<body>
<h1>Dashboard</h1>
</body>
</html>
Linguagem de código: PHP ( php )
Portanto, a index.php
página no public
diretório funciona conforme o esperado.
O index.php
in admin/dashboard
também inclui os arquivos header.php
e footer.php
:
<?php require '../../inc/header.php' ?>
<h1>Dashboard</h1>
<?php require '../../inc/footer.php' ?>
Linguagem de código: PHP ( php )
Ao navegar na página http://localhost/web/admin/dashboard/index.php
, você verá o seguinte erro:
Warning: require(../config/app.php): failed to open stream: No such file or directory in C:\xampp\htdocs\web\inc\header.php on line 1
Fatal error: require(): Failed opening required '../config/app.php' (include_path='\xampp\php\PEAR') in C:\xampp\htdocs\web\inc\header.php on line 1
Linguagem de código: PHP ( php )
A mensagem de erro mostra que header.php não pode carregar o '../config/app.php'
arquivo.
Quando index.php
in the admin/dashboard
diretório carrega o código do header.php
, ele encontrará config/app.php
dentro do admin
diretório, não root
no diretório.
Como o admin
diretório não contém o config/app.php
arquivo, o PHP emite um erro.
Para corrigir esse problema, você pode usar o __DIR__
ao incluir o config.php
no header.php
arquivo assim:
<?php require __DIR__. '/../config/app.php' ?>
Linguagem de código: PHP ( php )
O index.php
no admin/dashboard
funcionará corretamente.
Isso ocorre porque quando o PHP carrega o inc/header.php
arquivo de public/index.php
ou admin/dashboard/index.php
, o __DIR__
interior inc/header.php
sempre retorna C:\xampp\htdocs\web\inc
.
Portanto, é uma boa prática usar a __DIR__
constante ao incluir um arquivo.
Resumo
- PHP
__DIR__
retorna o diretório de um arquivo ou o diretório do arquivo de inclusão quando o arquivo é usado como um include. - Use
__DIR__
ao incluir um arquivo.