Como pegar o nome do arquivo atual – php arquivo

Pergunta:


Recentemente tive um problema na identificação da página atual.

Estava utilizando __FILE__ para pegar o arquivo atual, e utilizava substr() para pegar a string após a ultima ocorrência
de barras, acontece que em alguns sistemas operacionais essas barras funcionam de forma diferente e acabam não retornando o nome da forma esperada.

Existe alguma função/variável que já retorne o nome do arquivo ?

O que eu uso atualmente:

 echo substr(__FILE__, strrpos(__FILE__, '\') + 1, -4);

Antes utilizava:

 echo substr($_SERVER['REQUEST_URI'], strrpos($_SERVER['REQUEST_URI'], '/') + 1, -4);

Aprendi agora:

 echo basename($_SERVER['PHP_SELF'],'.php');

Autor da pergunta Gabriel Rodrigues

Bacco

Creio que o mais simples é isso:

<?php
   basename( __FILE__ );
?>

Alternativa, que dá até mais informações:

<?php
   $path_parts = pathinfo( __FILE__ );
   echo $path_parts['basename'];
?>

Veja ambas funcionando no IDEONE.

A combinação explode() & end() pode obter o mesmo resultado(pegar o nome do arquivo) atual;

O explode() transforma a string retornada por __FILE__ em um array, o delimitar é a barra de diretórios que pode ser ou / e end() retorna o último elemento do array que é o nome do arquivo.

<?php
  $arquivo = explode(DIRECTORY_SEPARATOR, __FILE__);
  echo end($arquivo);

Você pode utilizar a constante DIRECTORY_SEPARATOR para detectar corretamente qual a barra é utilizada pelo seu sistema operacional para separação de diretórios.

A título de curiosidade, existem outras constantes, como PATH_SEPARATOR (que armazena o carácter responsável por por separar os diretórios do path – no windows é ‘;’ e no linux ‘:’) e PHP_EOL, que armazena o quebra de linha do seu sistema operacional.

O código abaixo é multi-plataforma:

<?php
$file =  substr(strrchr(__FILE__, DIRECTORY_SEPARATOR), 1);
echo $file;

Referência: http://php.net/manual/pt_BR/dir.constants.php

Apenas uma obervação:
Existem duas formas de pegar o nome do arquivo.

Ex.:
Arquivo A.php

<?php
   $dir1 = basename($_SERVER['PHP_SELF']);
   $dir2 = basename( __FILE__ );
        echo "<br><br>Dir 1: ".$dir1;
        echo "<br><br>Dir 2: ".$dir2;
?>

Arquivo B.php

<? php inlude('A.php'); ?>

Ao “compilar” o arquivo B.php, o resultado final será:
Dir 1: B.php
Dir 2: A.php

Conclusão: Um imprime o local do arquivo que está sendo importado e o outro imprime o arquivo que está sendo executado.

😉

Transformo a string constante FILE em um arranjo utilizando o separador de diretórios ( de acordo com sistema operacional – DIRECTORY_SEPARATOR ) como o separador de campo para criar o arranjo.
O ultimo elemento deste array é o nome do arquivo e a sua extensão.

Exemplos:

<?php

    $foo = explode(DIRECTORY_SEPARATOR, __FILE__);

    // o ultimo elemento deste array é o nome do arquivo
    $arquivo = end($foo);
?>

O mesmo raciocínio pode ser usado para obter a extensão do arquivo

<?php

    $foo = explode('.', __FILE__);

    // o último elemento do arranjo
    $extensao = end($foo);
?>

Extra: obtendo o caminho único (path) para o arquivo

<?php

    // caminho para o arquivo
    $caminho = realpath(dirname(__FILE__));
?>

Fonte

Related Posts:

Qual a diferença entre AppCompatActivity e Activity? – android android-activity
Pergunta: Qual a diferença da AppCompatActivity para Activity ? A partir de qual versão a AppCompatActivity foi adicionada ao Android? Autor da pergunta Luhhh A diferença reside ...
Como abreviar palavras em PHP? – php string
Pergunta: Possuo informações comuns como nome de pessoas e endereços, e preciso que elas contenham no máximo 30 caracteres sem cortar palavras. Exemplo: 'Avenida Natalino João Brescansin' ...
Qual é a finalidade de um parêntese vazio numa declaração Lambda? – c# expressões-lambda característica-linguagem
Pergunta: Criei um exemplo de uma declaração Lambda sem argumentos, entretanto, estou com duvidas referente a omissão do parêntese vazio () na declaração. Veja o exemplo: class ...
Boas práticas para URI em API RESTful – api rest restful
Pergunta: Estou com dúvida em relação às URIs de alguns recursos da api que estou desenvolvendo. Tenho os recursos projetos e atividades com relação 1-N, ...
Dúvidas sobre a integração do MySQL com Java – java mysql netbeans
Pergunta: Estou criando um sistema no NetBeans, utilizando a linguagem Java e o banco de dados MySQL. Escrevi o seguinte código para realizar a conexão ...
Qual é a finalidade da pasta Model do framework Inphinit? – php inphinit
Pergunta: No Inphinit micro-framework existe a pasta Model que fica dentro da pasta application, e nela é onde ficam as classes, mas eu estou muito ...
Uso do ‘@’ em variáveis – javascript typescript coffeescript
Pergunta: Vejo em algumas linguagens que compilam para javascript, como TypeScript e CoffeeScript, o uso do @ em variáveis, como também, casos em que o ...
Qual tamanho máximo um arquivo JSON pode ter? – json arquivo
Pergunta: Vou dar um exemplo para conseguir explicar minha duvida: Preciso recuperar informação de imagens vindas de uma API, esse banco de imagens me retorna JSON's ...
O que é Teste de Regressão? – terminologia engenharia-de-software testes
Pergunta: Na matéria de Teste de Software o professor abordou um termo chamado Teste de Regressão, isto dentro da disciplina de teste de software. Sendo ...
O que é um construtor da linguagem? – php característica-linguagem
Pergunta: Em PHP, já li e ouvi várias vezes a respeito dos Construtores da Linguagem. Os casos que sempre ouvi falar deles foi em casos ...
Função intrínseca para converter numérico para string – cobol
Pergunta: Estou a tentar saber se existe alguma função intrínseca do COBOL para converter um data numérico para string sem precisar usar a cláusula REDEFINES: ( ...
Porque usar implements? – java android
Pergunta: Qual a diferença entre usar btn.setOnClickListener(new OnClickListener() { e public class MainActivity extends Activity implements OnClickListener{ Estive fazendo um curso de Android e meu professor falou que ...
O que é XHTML e quando deve ser usado? – html xml xhtml
Pergunta: O que eu sei é que o XHTML precisa ser XML válido. Isso implica, por exemplo, que todas as tags precisam ser fechadas. Por ...
Uma placa aceleradora de vídeo pode melhorar o desempenho não-gráfico? [fechada] – desempenho
Pergunta: Para desenvolver em Ruby on Rails, eu utilizo aqui uma máquina virtual do VirtualBox com Ubuntu Server 14.04 sem interface gráfica instalada. Recentemente descobri uma ...
Concat() VS Union() – c# .net
Pergunta: Qual a diferença entre Concat() e Union() ? Quando usar Concat() e quando usar Union() ? Somente pode ser usado em list ? ...

Deixe uma resposta

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