ruta obtener info how filename extension detectar con archivo php file-extension

obtener - pathinfo php 7



¿Cómo obtener(extraer) una extensión de archivo en PHP? (22)

use más seguro: PARSE_URL (en lugar de PATHINFO )

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

PATHINFO devuelve:

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


PARSE_URL devuelve:

$x = parse_url($url); $x[''scheme''] 🡺 ''http'' $x[''host''] 🡺 ''example.com'' $x[''path''] 🡺 ''/myfolder/sympony.mp3'' $x[''query''] 🡺 ''aa=1&bb=2'' $x[''fragment'']🡺 '''' //<----- this outputs hashtag "XYZ" only in case, when the link containing that hashtag was manually passed to function, because automatically, hashtags are not automatically detectable by PHP

dirname(parse_url($url)[''path'']) 🡺 /myfolder basename(parse_url($url)) 🡺 sympony.mp3 pathinfo(parse_url($url)[''path''], PATHINFO_EXTENSION) 🡺 mp3

ps note, la parte Hashtag de url (es decir, #smth ) no está disponible en la solicitud de PHP, pero solo con javascript.

Para ejemplos útiles, vea: Obtenga la URL completa en PHP

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.


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

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


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 que no son ASCII (por lo general, simplemente los suprime de la salida), en extensiones que generalmente no son un problema, pero no hace daño estar al tanto de esa advertencia.


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

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

Entonces $ ext será ".txt"


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 corto y eficiente
  3. Funciona con un nombre de archivo y una ruta completa

Descubrí que las soluciones pathinfo() y SplFileInfo funcionan bien para archivos estándar en el sistema de archivos local, pero puede tener dificultades si trabaja con archivos remotos, ya que las 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 tratarán (incorrectamente) como parte de la extensión del archivo.

Descubrí que esta era una forma confiable de usar pathinfo() en una URL después de analizarla 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()


Esto funcionara

$ext = pathinfo($filename, PATHINFO_EXTENSION);


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

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


La gente de otros lenguajes de scripting siempre piensa que los suyos son mejores porque tienen una función incorporada para hacer eso y no PHP (ahora mismo estoy buscando a los pitones en-) :-).

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

$ext = pathinfo($filename, PATHINFO_EXTENSION);

Esto es rápido y incorporado. 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. P.EJ:

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

También tenga en cuenta que esto no tiene en cuenta el contenido del archivo o el tipo MIM, 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 una ruta de recursos de URL, que se cubren utilizando PARSE_URL.

Disfrutar


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

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

Aquí hay un ejemplo simplificado de procesar 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($_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; }


Puede obtener toda la extensión de archivo en una carpeta en particular y realizar la operación 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), es probable que no quiera personalizarlo todo. Muchas otras respuestas fallarán con /root/my.folder/my.css

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


Siempre que no contenga ruta, también puede utilizar:

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

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


También hay SplFileInfo :

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

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

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


También puedes probar 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útala ;)


También puedes probar esto:

pathinfo(basename( $_FILES["fileToUpload"]["name"]),PATHINFO_EXTENSION)


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];


Utilizar

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).


pathinfo() es una matriz. Podemos verificar el nombre del directorio, nombre del 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";


pathinfo()

$path_info = pathinfo(''/foo/bar/baz.bill''); echo $path_info[''extension'']; // "bill"


1) Si está utilizando (PHP 5> = 5.3.6) puede usar SplFileInfo::getExtension - 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 dará salida

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 dará salida

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

// EDITAR: se eliminó un corchete


substr($path, strrpos($path, ''.'') + 1);