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);
}
- Funciona con varias partes en una extensión, por ejemplo,
tar.gz
- Código corto y eficiente
- 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";
$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);