2010-11-19 27 views
198

Si tengo un script PHP, ¿cómo puedo obtener el nombre de archivo desde ese script?Obtener el nombre del archivo de secuencia de comandos actual

Además, dado el nombre de un script del formulario jquery.js.php, ¿cómo puedo extraer solo la parte "jquery.js"?

+1

Estas son dos preguntas en una. ¿Cuál quieres saber? ¿Cómo decir el nombre del guión actual, cómo cortar la extensión desde un nombre de archivo, o ambos? –

+2

both :) thank you – Alex

+1

La palabra 'también' indica que está haciendo una pregunta adicional. Sheesh. Algunos chicos píos. – digiscripter

Respuesta

322

Simplemente use PHP magic constant__FILE__ para obtener el nombre de archivo actual.

Pero parece que quieres la pieza sin .php. Así que ...

basename(__FILE__, '.php'); 

Un removedor de extensión 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" 

Uso de las funciones de la biblioteca estándar es de cadena much quicker, como era de esperar.

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

¿Por qué no simplemente usar 'substr' y' strrchr' para quitar el último '.' y todo lo que está detrás de él? – ThiefMaster

+6

@ThiefMaster Porque hay algo incorporado en PHP para manejar las extensiones de archivos. La rueda existe, y rueda bien. – alex

+1

¡Pero una expresión regular puede ser más costosa! – ThiefMaster

18

respuesta de Alex es correcta pero también se podría hacer esto sin expresiones regulares, así:

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

Esto corre el riesgo de modificar un nombre de archivo como 'hey.php-i-am-a-weird-filename.php'. – alex

+0

Ya pensé en eso, pero pensé que lo estaban usando para la única página mencionada en la pregunta. También puede verificar si el ".php" está al final de la cadena. No dice que su pregunta es incorrecta, pero las expresiones regulares pueden ser una especie de dolor en el culo y, por lo general, se usan en escenarios en los que se podría usar un método mucho más simple y menos intensivo en recursos. – user

+0

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

98

Cuando desee necesidades de inclusión saber qué archivo es en (es decir, qué nombre de script realmente se solicitó), use:

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

Porque cuando escribe en un archivo, normalmente conoce su nombre.

Editar: Como señala Alec Teal, si utiliza enlaces simbólicos, se mostrará el nombre de enlace simbólico en su lugar.

+4

que fue útil para mí)) necesario para obtener el nombre del archivo de script, en ** archivo requerido **) –

+0

Esta respuesta funcionó para mí. –

+4

Esto es incorrecto, no obtendrá el archivo PHP real, sino el archivo que el servidor web resolvió para la solicitud. Diferente si usa enlaces sim. –

48

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

basename(__FILE__, ".php") muestra el nombre del archivo en el que se incluye este código - Significa que si se incluye este código en header.php y la página actual es index.php, volverá cabecera no índice.

basename($_SERVER["REQUEST_URI"], ".php") - Si utiliza incluir este código en header.php y la página actual es index.php, volverá índice no cabecera.

+0

que es más seguro 'SCRIPT_FILENAME' o' REQUEST_URI'? Sé que ambos son servidores pero no 'REQUEST_URI' un valor manipulado por el usuario. habilita una amenaza de "inyección URI" – SparK

+1

ambos tienen su propia impotencia, pero puede proteger su url usando diferentes archivadores, como mysql_real_escape_string, stripslashes, etc. –

+5

@KhandadNiazi 'nombre base ($ _ SERVER [" REQUEST_URI "]," .php "); 'devolverá el nombre de la carpeta si el enlace es de la forma' http: // example.com/somefolder'. Mientras 'basename ($ _ SERVER ['PHP_SELF']," .php ");' siempre devolverá el nombre del script, en este caso 'index'. –

21

Esto podría ayudar:

basename($_SERVER['PHP_SELF']) 

que funcionará incluso si está utilizando incluir.

+0

Eso todavía deja al '.php' al final que el OP intentaba deshacerse de –

+3

@stumpx Luego puedes hacer' nombre base ($ _ SERVER ['PHP_SELF'], ".php"); ' –

+0

Tengo 2 archivos, header.php y home.php, se llama al header.php en home.php, ¿cómo puedo detectar en el encabezado que la página actual es home.php o contact.php, así que podría cambiar un banner, etc. –

6

también puede utilizar esto:

echo $pageName = basename($_SERVER['SCRIPT_NAME']); 
0
$filename = "jquery.js.php"; 
$ext = pathinfo($filename, PATHINFO_EXTENSION);//will output: php 
$file_basename = pathinfo($filename, PATHINFO_FILENAME);//will output: jquery.js 
4

Una forma más general estaría utilizando pathinfo(). Desde la versión 5.2 es compatible con PATHINFO_FILENAME.

Así

pathinfo(__FILE__,PATHINFO_FILENAME) 

también hará lo que usted necesita.

0

__FILE__ ejemplos de uso en base a los resultados de servidor localhost:

echo __FILE__; 
// C:\LocalServer\www\templates\page.php 

echo strrchr(__FILE__ , '\\'); 
// \page.php 

echo substr(strrchr(__FILE__ , '\\'), 1); 
// page.php 

echo basename(__FILE__, '.php'); 
// page 
9

que 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 se olvide de quitar :)

<br>

+1

Entonces ... . SCRIPT_NAME, SCRIPT_FILENAME y PHP_SELF son 3 cosas diferentes, ¿no? (¿Por qué tantos vars con el mismo valor ?! Seguramente Rasmus estaba drogado) – SparK

0

Como algunos de dichos nombres base ($ _ SERVER ["SCRIPT_FILENAME"], '.php') y nombre base (__FILE__, '.php') son buenas maneras de probar esto.

Para mí usando el segundo fue la solución para algunas instrucciones de validación que estaba haciendo

0

$ argv [0]

lo he encontrado mucho más fácil de usar $argv[0]. El nombre del script de ejecución siempre es el primer elemento en el conjunto . A diferencia de todos los demás métodos sugeridos en otras respuestas, este método no requiere el uso de basename() para eliminar el árbol de directorios. Por ejemplo:

  • echo __FILE__; vuelve algo así como /my/directory/path/my_script.php

  • echo $argv[0]; vuelve my_script.php

1

Trate Esta

$current_file_name = $_SERVER['PHP_SELF']; 
 
echo $current_file_name;

Cuestiones relacionadas