697 votos

Cómo extraer un archivo de extensión en PHP?

Esta es una pregunta que usted puede leer en todas partes en 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, no siempre es "la mejor manera" y que debería estar en stackoverflow.

1724voto

e-satis Puntos 146299

La gente de otros lenguajes de scripting siempre piensa que el suyo es mejor, porque tiene una función integrada para hacer eso y no PHP (estoy mirando pythonistas ahora mismo :-)).

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

$ext = pathinfo($filename, PATHINFO_EXTENSION);

Esta es rápido, eficiente, confiable e integrada. pathinfo() puede dar otra información, tal como canónica de la ruta, dependiendo de la constante que se le pasa.

Disfrutar

163voto

Adam Wright Puntos 31715

pathinfo()

Un ejemplo...

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

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

57voto

hakre Puntos 102271

También hay SplFileInfo:

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

A menudo, usted puede escribir mejor código, si se pasa un objeto en lugar de una cadena, el código es más de hablar a continuación. A partir de PHP 5.4 esto es un one-liner:

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

21voto

Toxygene Puntos 172

E-satis respuesta es la correcta para determinar la extensión de archivo.

Como alternativa, en lugar de confiar en una extensión de archivos, puede utilizar la fileinfo (http://us2.php.net/fileinfo) para determinar los archivos tipo MIME.

He aquí un ejemplo simplificado de procesamiento de una imagen subida por el 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($_FILES['image']['tmp_name'], FILEINFO_MIME) {
    case 'image/jpg':
        $im = imagecreatefromjpeg($_FILES['image']['tmp_name']);
    break;

    case 'image/png':
        $im = imagecreatefrompng($_FILES['image']['tmp_name']);
    break;

    case 'image/gif':
        $im = imagecreatefromgif($_FILES['image']['tmp_name']);
    break;
}

14voto

Gabriele F. Puntos 161

Esta es la mejor manera:

$filename = 'hello.txt';
$ext = pathinfo($filename, PATHINFO_EXTENSION);
echo $ext;

El código de arriba de impresión txt

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X