¿Cómo puedo obtener el nombre del archivo de script actual, pero sin la extensión “.php”?

6 minutos de lectura

Avatar de usuario de Alex
Alex

Si tengo un script PHP, ¿cómo puedo obtener el nombre del archivo que se está ejecutando actualmente sin su extensión?

Dado el nombre de un script de la forma “jquery.js.php”, ¿cómo puedo extraer solo la parte “jquery.js”?

avatar de usuario de alex
Alex

solo usa el PHP constante mágica __FILE__ para obtener el nombre de archivo actual.

Pero parece que quieres la parte sin .php. Entonces…

basename(__FILE__, '.php'); 

Un eliminador de extensiones de archivo más genérico se vería así…

function chopExtension($filename) {
    return pathinfo($filename, PATHINFO_FILENAME);
}

var_dump(chopExtension('bob.php')); // string(3) "bob"
var_dump(chopExtension('bob.i.have.dots.zip')); // string(15) "bob.i.have.dots"

El uso de funciones de biblioteca de cadenas estándar es mucho mas rapidocomo era de esperar.

function chopExtension($filename) {
    return substr($filename, 0, strrpos($filename, '.'));
}

  • ¿Por qué no usar simplemente substr y strrchr despojarse de lo último . y todo lo que hay detrás?

    – ThiefMaster

    19 de noviembre de 2010 a las 1:41

  • @ThiefMaster Porque hay algo integrado en PHP para manejar extensiones de archivos. La rueda existe y rueda bien.

    – Alex

    19 de noviembre de 2010 a las 2:08


  • ¡Pero una expresión regular podría ser más cara!

    – ThiefMaster

    19 de noviembre de 2010 a las 11:42

  • Mientras __FILE__ te da la .php archivo en el que se encuentra la línea, en realidad desea $_SERVER['SCRIPT_NAME'] para el script de nivel superior que se está ejecutando actualmente (el que invocó el servidor web o directamente en la línea de comando)

    – Drew Stephens

    28 de abril de 2011 a las 17:34


  • @Drew Supongo que eso depende de lo que realmente quieras.

    – Alex

    28 de abril de 2011 a las 23:17

Avatar de usuario de Spark
Chispa – chispear

Cuando desee que su inclusión sepa en qué archivo se encuentra (es decir, qué nombre de script se solicitó realmente), use:

basename($_SERVER["SCRIPT_FILENAME"], '.php')

Porque cuando estás escribiendo en un archivo, normalmente sabes su nombre.

Editar: como señaló Alec Teal, si usa enlaces simbólicos, mostrará el nombre del enlace simbólico en su lugar.

  • Eso fue útil para mí)) necesitaba obtener el nombre del archivo de script, en archivo requerido)

    – Denys Klimenko

    27/10/2015 a las 21:18


  • Esto está mal, no obtendrá el archivo PHP real, sino el archivo que el servidor web resolvió según la solicitud. Diferente si usas simlinks.

    – Alec Teal

    28 de enero de 2016 a las 14:23

  • También es diferente si usa PHP-FPM.

    –Andrew Ensley

    26 de agosto de 2016 a las 13:49

  • Además, si también necesita la extensión, use pathinfo($_SERVER["SCRIPT_FILENAME"], PATHINFO_BASENAME);

    – c00000fd

    13 de marzo de 2020 a las 6:47

  • @ c00000fd Si necesita la extensión, simplemente omita el segundo parámetro …

    – Chispa – chispear

    14 de marzo de 2020 a las 20:12

avatar de usuario de max4ever
max4ever

Ver http://php.net/manual/en/function.pathinfo.php

pathinfo(__FILE__, PATHINFO_FILENAME);

Avatar de usuario de Khandad Niazi
Khandad Niazi

Aquí está la diferencia entre basename(__FILE__, ".php") y basename($_SERVER['REQUEST_URI'], ".php").

basename(__FILE__, ".php") muestra el nombre del archivo donde se incluye este código – Significa que si incluye este código en encabezado.php y la pagina actual es índice.phpvolverá encabezamiento no índice.

basename($_SERVER["REQUEST_URI"], ".php") – Si utiliza incluir este código en encabezado.php y la pagina actual es índice.phpvolverá índice no encabezamiento.

Esto podría ayudar:

basename($_SERVER['PHP_SELF'])

funcionará incluso si está utilizando include.

  • Eso todavía deja el .php al final que el OP estaba tratando de deshacerse de

    – Brian Leishmann

    24 de febrero de 2013 a las 0:05

  • @stumpx Entonces puedes hacer basename($_SERVER['PHP_SELF'], ".php");

    – katalin_2003

    3 de noviembre de 2014 a las 19:08

  • Tengo 2 archivos, header.php y home.php, el header.php se llama en home.php, ¿cómo puedo detectar en el encabezado que la página actual es home.php o contact.php para poder cambiar algún banner, etc.?

    – Moxet Kan

    28 de diciembre de 2015 a las 10:12

avatar de usuario de begoyan
begoyan

Aquí hay una lista de lo que he encontrado recientemente buscando una respuesta:

//self name with file extension
echo basename(__FILE__) . '<br>';
//self name without file extension
echo basename(__FILE__, '.php') . '<br>';
//self full url with file extension
echo __FILE__ . '<br>';

//parent file parent folder name
echo basename($_SERVER["REQUEST_URI"]) . '<br>';
//parent file parent folder name with //s
echo $_SERVER["REQUEST_URI"] . '<br>';

// parent file name without file extension
echo basename($_SERVER['PHP_SELF'], ".php") . '<br>';
// parent file name with file extension
echo basename($_SERVER['PHP_SELF']) . '<br>';
// parent file relative url with file etension
echo $_SERVER['PHP_SELF'] . '<br>';

// parent file name without file extension
echo basename($_SERVER["SCRIPT_FILENAME"], '.php') . '<br>';
// parent file name with file extension
echo basename($_SERVER["SCRIPT_FILENAME"]) . '<br>';
// parent file full url with file extension
echo $_SERVER["SCRIPT_FILENAME"] . '<br>';

//self name without file extension
echo pathinfo(__FILE__, PATHINFO_FILENAME) . '<br>';
//self file extension
echo pathinfo(__FILE__, PATHINFO_EXTENSION) . '<br>';

// parent file name with file extension
echo basename($_SERVER['SCRIPT_NAME']);

No olvides eliminar 🙂

<br>

  • Eso todavía deja el .php al final que el OP estaba tratando de deshacerse de

    – Brian Leishmann

    24 de febrero de 2013 a las 0:05

  • @stumpx Entonces puedes hacer basename($_SERVER['PHP_SELF'], ".php");

    – katalin_2003

    3 de noviembre de 2014 a las 19:08

  • Tengo 2 archivos, header.php y home.php, el header.php se llama en home.php, ¿cómo puedo detectar en el encabezado que la página actual es home.php o contact.php para poder cambiar algún banner, etc.?

    – Moxet Kan

    28 de diciembre de 2015 a las 10:12

avatar de usuario del usuario
usuario

la respuesta de alex es correcta, pero también podría hacer esto sin expresiones regulares como esta:

str_replace(".php", "", basename($_SERVER["SCRIPT_NAME"]));

  • Esto corre el riesgo de alterar un nombre de archivo como hey.php-i-am-a-weird-filename.php.

    – Alex

    19 de noviembre de 2010 a las 2:08

  • Ya pensé en eso, pero supuse que lo estaban usando para la página única mencionada en la pregunta. También puede verificar si el “.php” está al final de la cadena. No digo que su pregunta sea incorrecta, pero las expresiones regulares pueden ser un dolor de cabeza y generalmente se usan en escenarios donde se podría usar un método mucho más simple y con menos recursos.

    – usuario

    19 de noviembre de 2010 a las 2:39

  • Shofner, ejecuté algunos puntos de referencia y su camino se ejecuta aproximadamente el doble de rápido, pero aún más de 1000 iteraciones, la diferencia es de 0.003231 microsegundos.

    – Alex

    19 de noviembre de 2010 a las 12:12

¿Ha sido útil esta solución?