Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Felipe Medeiros

Para que serve require(dirname( __FILE__ ) . '/file.php');

Recommended Posts

Se eu nao me engano a função dirname() mostra a o nome do arquivo do caminho especificado. A minha duvida é quanto ao __FILE__. Pra que serve isso?

 

A função require() e dirname() eu sei pra que serve. O que é esse __FILE__

 

 

Eu vi um codigo parecido com esse no arquivo index.php da primeira pasta do wordpress 3.8 da seguinte forma:

 

 

 

require( dirname( __FILE__ ) . '/wp-blog-header.php' )

 

;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se eu nao me engano a função dirname() mostra a o nome do arquivo do caminho especificado. A minha duvida é quanto ao __FILE__. Pra que serve isso?

Não você entendeu errado, dirname() mostra o nome do diretório como o próprio nome da função sugere, por exemplo imagine que temos o seguinte caminho:

$path = 'c:/caminho/para/diretorio/arquivo.qualquercoisa';

 

Aplicando a função, :

echo dirname($path); // c:/caminho/para/diretorio

 

Obs.: dirname(__FILE__) seria o mesmo que usar a constante __DIR__, porém ela está disponível a partir da versão 5.3.

Compartilhar este post


Link para o post
Compartilhar em outros sites

dirname(__FILE__) pega o diretório completo do arquivo em execução.

 

Sim, __DIR__ é igual à dirname(__FILE__) , só que __DIR__ está presente apenas nas versões 5.3 ou maiores.

 

Por isto muito das vezes é mais seguro fazer dirname(__FILE__), devido a maioria dos hosts rodarem ainda a versão 5.2 do php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse __FILE__ é o caminho absoluto do arquivo que chama. A partir do PHP 5.3, podemos usar __DIR__ ao invés de dirname(__FILE__).

 

O propósito é remover o problema com caminhos relativos, onde o caminho não depende de quem chama, mas de quem chama quem chama.

 

Exemplo:

 

/pasta1/pasta2/arquivo1.php

<?php

require '../arquivo2.php';

/pasta1/arquivo2.php

<?php

// nothing

/pasta1/arquivo3.php

<?php

require 'pasta2/arquivo1.php'; // incluirá o arquivo1.php, mas dará erro por que procurará pelo arquivo2.php na pasta-mãe da pasta1

Colocando isso em prova:

mkdir exemplo
cd exemplo
mkdir pasta1
mkdir pasta1/pasta2
touch pasta1/pasta2/arquivo1.php
touch pasta1/arquivo2.php
touch pasta1/arquivo3.php
echo "<?php require '../arquivo2.php';" > pasta1/pasta2/arquivo1.php 
echo "<?php // nothing" > pasta1/arquivo2.php
echo "<?php require 'pasta2/arquivo1.php';" > pasta1/arquivo3.php
php pasta1/arquivo3.php

Resultado:

Warning: require(../arquivo2.php): failed to open stream: No such file or directory in /exemplo/pasta1/pasta2/arquivo1.php on line 1

Fatal error: require(): Failed opening required '../arquivo2.php' (include_path='.:') in /exemplo/pasta1/pasta2/arquivo1.php on line 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.