Pregunta

Esta es una pregunta que puede leer en cualquier lugar de la web con varias respuestas:

$ext = end(explode('.', $filename));
$ext = substr(strrchr($filename, '.'), 1);
$ext = substr($filename, strrpos($filename, '.') + 1);
$ext = preg_replace('/^.*\.([^.]+)$/D', '$1', $filename);

$exts = split("[/\\.]", $filename);
$n    = count($exts)-1;
$ext  = $exts[$n];

etc.

Sin embargo, siempre hay " la mejor manera " y debe estar en desbordamiento de pila.

¿Fue útil?

Solución

Las personas de otros lenguajes de secuencias de comandos siempre piensan que la suya es mejor porque tienen una función incorporada para hacer eso y no PHP (estoy viendo Pythonistas en este momento :-)).

De hecho, existe, pero pocas personas lo saben. Conozca pathinfo () :

$ext = pathinfo($filename, PATHINFO_EXTENSION);

Esto es rápido e integrado. pathinfo () puede proporcionarle otra información, como la ruta canónica, dependiendo de la constante que le pase.

Recuerde que si desea poder tratar con caracteres que no son ASCII, primero debe establecer la configuración regional. E.G:

setlocale(LC_ALL,'en_US.UTF-8');

Además, tenga en cuenta que esto no tiene en cuenta el contenido del archivo o el tipo mime, solo obtiene la extensión. Pero es lo que pediste.

Por último, tenga en cuenta que esto solo funciona para una ruta de archivo, no para una ruta de recursos de URL, que se cubre con PARSE_URL.

Disfruta

Otros consejos

pathinfo ()

$path_info = pathinfo('/foo/bar/baz.bill');

echo $path_info['extension']; // "bill"

URL de ejemplo: http://example.com/myfolder/sympony.mp3?a=1&b=2#XYZ

Para las URL, no utilice PATHINFO :

$x = pathinfo($url);
$x['dirname']   🡺 'http://example.com/myfolder'
$x['basename']  🡺 'sympony.mp3?a=1&b=2#XYZ'         // <------- BAD !!
$x['extension'] 🡺 'mp3?a=1&b=2#XYZ'                 // <------- BAD !!
$x['filename']  🡺 'sympony'

Utilice PARSE_URL en su lugar:

$x = parse_url($url);
$x['scheme']  🡺 'http'
$x['host']    🡺 'example.com'
$x['path']    🡺 '/myfolder/sympony.mp3'
$x['query']   🡺 'aa=1&bb=2'
$x['fragment']🡺 'XYZ'             

Nota: los hashtags no están disponibles en el lado del servidor, solo si se agregan manualmente.


Para ver todos los ejemplos de PHP nativos, consulte: Obtenga la URL completa en PHP

También hay SplFileInfo :

$file = new SplFileInfo($path);
$ext  = $file->getExtension();

A menudo, puede escribir un código mejor si pasa un objeto de este tipo en lugar de una cadena, su código habla más. Desde PHP 5.4, esto es de una sola línea:

$ext  = (new SplFileInfo($path))->getExtension();

La respuesta de E-satis es la forma correcta de determinar la extensión del archivo.

Alternativamente, en lugar de depender de una extensión de archivo, puede usar la información de archivo ( http: //us2.php. net / fileinfo ) para determinar el tipo de archivos MIME.

Aquí hay un ejemplo simplificado de procesamiento de una imagen cargada por un usuario:

// Code assumes necessary extensions are installed and a successful file upload has already occurred

// Create a FileInfo object
$finfo = new FileInfo(null, '/path/to/magic/file');

// Determine the MIME type of the uploaded file
switch ($finfo->file(

La respuesta de E-satis es la forma correcta de determinar la extensión del archivo.

Alternativamente, en lugar de depender de una extensión de archivo, puede usar la información de archivo ( http: //us2.php. net / fileinfo ) para determinar el tipo de archivos MIME.

Aquí hay un ejemplo simplificado de procesamiento de una imagen cargada por un usuario:

<*>FILES['image']['tmp_name'], FILEINFO_MIME)) { case 'image/jpg': $im = imagecreatefromjpeg(

La respuesta de E-satis es la forma correcta de determinar la extensión del archivo.

Alternativamente, en lugar de depender de una extensión de archivo, puede usar la información de archivo ( http: //us2.php. net / fileinfo ) para determinar el tipo de archivos MIME.

Aquí hay un ejemplo simplificado de procesamiento de una imagen cargada por un usuario:

<*>FILES['image']['tmp_name']); break; case 'image/png': $im = imagecreatefrompng(

La respuesta de E-satis es la forma correcta de determinar la extensión del archivo.

Alternativamente, en lugar de depender de una extensión de archivo, puede usar la información de archivo ( http: //us2.php. net / fileinfo ) para determinar el tipo de archivos MIME.

Aquí hay un ejemplo simplificado de procesamiento de una imagen cargada por un usuario:

<*>FILES['image']['tmp_name']); break; case 'image/gif': $im = imagecreatefromgif(

La respuesta de E-satis es la forma correcta de determinar la extensión del archivo.

Alternativamente, en lugar de depender de una extensión de archivo, puede usar la información de archivo ( http: //us2.php. net / fileinfo ) para determinar el tipo de archivos MIME.

Aquí hay un ejemplo simplificado de procesamiento de una imagen cargada por un usuario:

<*>FILES['image']['tmp_name']); break; }

1) Si está utilizando (PHP 5 > = 5.3.6) puede usar SplFileInfo :: getExtension & # 8212; Obtiene la extensión de archivo

Código de ejemplo

<?php

$info = new SplFileInfo('test.png');
var_dump($info->getExtension());

$info = new SplFileInfo('test.tar.gz');
var_dump($info->getExtension());

?>

Esto generará

string(3) "png"
string(2) "gz"

2) Otra forma de obtener la extensión si está utilizando (PHP 4 > = 4.0.3, PHP 5) es pathinfo

Código de ejemplo

<?php

$ext = pathinfo('test.png', PATHINFO_EXTENSION);
var_dump($ext);

$ext = pathinfo('test.tar.gz', PATHINFO_EXTENSION);
var_dump($ext);

?>

Esto generará

<*>

// EDITAR: eliminó un corchete

Mientras no contenga una ruta, también puede usar:

array_pop(explode('.',$fname))

Donde $ fname es el nombre del archivo, por ejemplo: my_picture.jpg Y el resultado sería: jpg

A veces es útil no usar pathinfo ($ path, PATHINFO_EXTENSION) , por ejemplo:

$path = '/path/to/file.tar.gz';

echo ltrim(strstr($path, '.'), '.'); // tar.gz
echo pathinfo($path, PATHINFO_EXTENSION); // gz

También tenga en cuenta que pathinfo no puede manejar algunos caracteres no ASCII (generalmente solo los suprime de la salida), en extensiones que generalmente no son un problema, pero no está de más ser consciente de esa advertencia.

La forma más sencilla de obtener la extensión de archivo en php es utilizar la función incorporada de php pathinfo .

$file_ext = pathinfo('your_file_name_here', PATHINFO_EXTENSION);
echo ($file_ext); // the out should be extension of file eg:-png, gif, html
substr($path, strrpos($path, '.') + 1);

Una solución rápida sería algo como esto.

    //exploding the file based on . operator
    $file_ext = explode('.',$filename);

    //count taken (if more than one . exist; files like abc.fff.2013.pdf
    $file_ext_count=count($file_ext);

    //minus 1 to make the offset correct
    $cnt=$file_ext_count-1;

    // the variable will have a value pdf as per the sample file name mentioned above.

$file_extension= $file_ext[$cnt];

Aquí hay un ejemplo, supongamos que $ filename es " example.txt "

$ext = substr($filename,strrpos($filename,'.',-1),strlen($filename));  

Entonces $ ext será " .txt "

pathinfo es una matriz. Podemos verificar nombre de directorio, nombre de archivo, extensión etc.

$path_parts = pathinfo('test.png');

echo $path_parts['extension'], "\n";
echo $path_parts['dirname'], "\n";
echo $path_parts['basename'], "\n";
echo $path_parts['filename'], "\n";  

puedes probar también esto
(trabajo en php 5. * y 7)

$info = new SplFileInfo('test.zip');
echo $info->getExtension(); // ----- Output -----> zip

consejo: devuelve una cadena vacía si el archivo no tiene extensión
disfrútalo;)

Esto funcionará

$ext = pathinfo($filename, PATHINFO_EXTENSION);

Descubrí que las soluciones pathinfo () y SplFileInfo funcionan bien para archivos estándar en el sistema de archivos local, pero puede tener dificultades si está trabajando con los archivos remotos como URL para imágenes válidas pueden tener un # (identificadores de fragmentos) y / o ? (parámetros de consulta) al final de la URL, que ambas soluciones tendrán ( incorrecto) tratar como parte de la extensión de archivo.

Descubrí que esta era una forma confiable de usar pathinfo () en una URL después de analizarla primero para eliminar el desorden innecesario después de la extensión del archivo:

$url_components = parse_url($url); // First parse the URL
$url_path = $url_components['path']; // Then get the path component
$ext = pathinfo($url_path, PATHINFO_EXTENSION); // Then use pathinfo()

También puedes probar esto:

 pathinfo(basename( 

También puedes probar esto:

<*>FILES["fileToUpload"]["name"]),PATHINFO_EXTENSION)

¿Por qué no usar substr ($ path, strrpos ($ path, '.') + 1); ? Es el método más rápido de todas las comparaciones. @Kurt Zhong ya respondió.

Verifiquemos el resultado comparativo aquí: https://eval.in/661574

Puede obtener todas las extensiones de archivo en una carpeta en particular y realizar operaciones con una extensión de archivo específica

<?php
    $files=glob("abc/*.*");//abc is folder all files inside folder
    //print_r($files);
    //echo count($files);
    for($i=0;$i<count($files);$i++):
        $extension = pathinfo($files[$i], PATHINFO_EXTENSION);
        $ext[]=$extension;
        //do operation for perticular extenstion type
        if($extension=='html'){
            //do operation
        }
    endfor;
    print_r($ext);
?>

Si está buscando velocidad (como en un enrutador), probablemente no quiera tokenizar todo. Muchas otras respuestas fallarán con /root/my.folder/my.css

ltrim(strrchr($PATH, '.'),'.');

Aunque la "mejor manera" es discutible, creo que esta es la mejor manera por varias razones:

function getExt($path)
{
    $basename = basename($path);
    return substr($basename, strlen(explode('.', $basename)[0]) + 1);
}
  1. Funciona con varias partes en una extensión, por ejemplo, tar.gz
  2. Código breve y eficiente
  3. Funciona con un nombre de archivo y una ruta completa

En realidad, estaba buscando eso.

<?php

$url = 'http://example.com/myfolder/sympony.mp3?a=1&b=2#XYZ';
$tmp = @parse_url($url)['path'];
$ext = pathinfo($tmp, PATHINFO_EXTENSION);

var_dump($ext);

OMI Esta es la mejor manera si tienes nombres de archivo como nombre.nombre.nombre.ext (feo pero a veces sucede)

$ext     = explode( '.', $filename ); //explode the string
$ext_len = count( $ext ) - 1; //count the array -1 (becouse count() starts from 1)
$my_ext  = $ext[ $ext_len ]; //get the last entry of the array

echo $my_ext;

Uso

str_replace('.', '', strrchr($file_name, '.'))

para una recuperación rápida de la extensión (si está seguro de que su nombre de archivo tiene uno).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top