read - php write file
PHP, obtener el nombre de archivo sin extensión de archivo (16)
Tengo este código PHP:
function ShowFileExtension($filepath)
{
preg_match(''/[^?]*/'', $filepath, $matches);
$string = $matches[0];
$pattern = preg_split(''//./'', $string, -1, PREG_SPLIT_OFFSET_CAPTURE);
if(count($pattern) > 1)
{
$filenamepart = $pattern[count($pattern)-1][0];
preg_match(''/[^?]*/'', $filenamepart, $matches);
return strtolower($matches[0]);
}
}
Si tengo un archivo llamado my.zip
, esta función devuelve .zip
.
Quiero hacer lo contrario, quiero que la función devuelva my
sin la extensión.
El archivo es solo una cadena en una variable.
@Gordon basename funcionará bien si conoce la extensión, si no puede usar explotar:
$filename = end(explode(".", $file));
@fire, en el caso de que el nombre de archivo use puntos, podría obtener el resultado incorrecto. Usaría el método @Gordon pero también obtendría la extensión, por lo que la función basename funciona con todas las extensiones, como esta:
$path = "/home/httpd/html/index.php";
$ext = pathinfo($path, PATHINFO_EXTENSION);
$file = basename($path, ".".$ext); // $file is set to "index"
Casi todas las soluciones anteriores tienen el nombre de archivo que se muestra en la variable $ path
A continuación, el fragmento obtendrá el nombre del archivo ejecutado actual sin extensión
echo pathinfo(basename($_SERVER[''SCRIPT_NAME'']), PATHINFO_FILENAME);
Explicación
$ _SERVER [''SCRIPT_NAME''] contiene la ruta del script actual.
Como alternativa a pathinfo()
, puede usar
-
basename()
- Devuelve el componente del nombre de archivo de la ruta
Ejemplo del manual de PHP
$path = "/home/httpd/html/index.php";
$file = basename($path); // $file is set to "index.php"
$file = basename($path, ".php"); // $file is set to "index"
Sin embargo, debes saber la extensión para eliminarlo con anticipación.
Sin embargo, dado que tu pregunta sugiere que tienes la necesidad de obtener la extensión y el nombre base, votaría la respuesta de Pekka como la más útil, porque te dará toda la información que desees acerca de la ruta y el archivo con un solo nativo función.
Corto
echo pathinfo(__FILE__)[''filename'']; // since php 5.2
Este único nombre de archivo devuelto sin ninguna extensión en 1 fila:
$path = "/etc/sudoers.php";
print array_shift(explode(".", basename($path)));
// will print "sudoers"
$file = "file_name.php";
print array_shift(explode(".", basename($file)));
// will print "file_name"
No es necesario para todo eso. Verifique pathinfo() , le proporciona todos los componentes de su ruta.
Ejemplo del manual:
$path_parts = pathinfo(''/www/htdocs/index.html'');
echo $path_parts[''dirname''], "/n";
echo $path_parts[''basename''], "/n";
echo $path_parts[''extension''], "/n";
echo $path_parts[''filename''], "/n"; // filename is only since PHP 5.2.0
Salida del código:
/www/htdocs
index.html
html
index
Y alternativamente, puede obtener solo ciertas partes como:
echo pathinfo(''/www/htdocs/index.html'', PATHINFO_EXTENSION); // outputs html
No hay necesidad de escribir muchos códigos. Incluso se puede hacer solo con una línea de código. Mira here
A continuación se muestra el código de una línea que solo devuelve el nombre de archivo y elimina el nombre de la extensión:
<?php
echo pathinfo(''logo.png'')[''filename''];
?>
Imprimirá
logo
Fuente: here
Nombre de archivo sin extensión de archivo cuando no conoces esa extensión:
$basename = substr($filename, 0, strrpos($filename, "."));
Otro enfoque es mediante el uso de expresiones regulares.
$fileName = basename($filePath);
$fileNameNoExtension = preg_replace("//.[^.]+$/", "", $fileName);
Esto elimina del último período .
hasta el final de la cadena.
Puedes escribir esto
$filename = current(explode(".", $file));
Estos devolverán el elemento actual de la matriz, si no se usaron antes.
Si la extensión no se conoce, use esta solución
pathinfo(''D:/dir1/dir2/fname'', PATHINFO_FILENAME); // return "fname"
pathinfo(''D:/dir1/dir2/fname.php'', PATHINFO_FILENAME); // return "fname"
pathinfo(''D:/dir1/dir2/fname.jpg'', PATHINFO_FILENAME); // return "fname"
pathinfo(''D:/dir1/dir2/fname.jpg'', PATHINFO_DIRNAME) . ''/'' . pathinfo(''D:/dir1/dir2/fname.jpg'', PATHINFO_FILENAME); // return "D:/dir1/dir2/fname"
Si no sabe qué extensión tiene, puede intentar esto:
$ext = strtolower(substr(''yourFileName.ext'', strrpos(''yourFileName.ext'', ''.'') + 1));
echo basename(''yourFileName.ext'',''.''.$ext); // output: "youFileName" only
Trabajando con todas las posibilidades:
image.jpg // output: "image"
filename.image.png // output: "filename.image"
index.php // output: "index"
Su respuesta está por debajo de la solución perfecta para ocultar a la extensión de archivo en php.
<?php
$path = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
echo basename($path, ".php");
?>
en mi caso, uso debajo. No me importa cuál es su extensión. : D creo que te ayudará
$exploded_filepath = explode(".", $filepath_or_URL);
$extension = end($exploded_filepath);
echo basename($filepath_or_URL, ".".$extension ); //will print out the the name without extension.