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”?
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
ystrrchr
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
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
max4ever
Ver http://php.net/manual/en/function.pathinfo.php
pathinfo(__FILE__, PATHINFO_FILENAME);
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
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
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