Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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' ).
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
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.phpWarning: 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
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.