PHP__DIR__

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.phpLinguagem de código:  CSS  ( css )

Contém header.phpo 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.phpo 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.phpe 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\incLinguagem de código:  PHP  ( php )

O __DIR__in the index.phpretorna o diretório atual do index.php C:\xampp\htdocs\webenquanto o __DIR__in the footer.phpfile retorna o diretório do footer.phparquivo 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.phpLinguagem de código:  CSS  ( css )

Contém config/app.phpa configuração do aplicativo:

<?php

define('APP_NAME', 'My Awesome App');Linguagem de código:  PHP  ( php )

Contém header.phpa parte do cabeçalho de uma página. Também inclui o config/app.phparquivo e usa a APP_NAMEconstante:

<?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.phpas tags de fechamento dos elementos bodye html:

</body>
</html>Linguagem de código:  PHP  ( php )

O public/index.phparquivo inclui os arquivos header.phpe 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.phppágina no publicdiretório funciona conforme o esperado.

O index.phpin admin/dashboardtambém inclui os arquivos header.phpe 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 1Linguagem de código:  PHP  ( php )

A mensagem de erro mostra que header.php não pode carregar o '../config/app.php'arquivo.

Quando index.phpin the admin/dashboarddiretório carrega o código do header.php, ele encontrará config/app.phpdentro do admindiretório, não rootno diretório.

Como o admindiretório não contém o config/app.phparquivo, o PHP emite um erro.

Para corrigir esse problema, você pode usar o __DIR__ao incluir o config.phpno header.phparquivo assim:

<?php  require __DIR__. '/../config/app.php' ?>Linguagem de código:  PHP  ( php )

O index.phpno admin/dashboardfuncionará corretamente.

Isso ocorre porque quando o PHP carrega o inc/header.phparquivo de public/index.phpou admin/dashboard/index.php, o __DIR__interior inc/header.phpsempre 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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *