2012-03-07 3 views
6

Я взрываю на "." для получения формата файла и имени:Получить расширение файла

list($txt, $ext) = explode(".", $name); 

Проблема в том, что некоторые файлы имеют имена с точками.

Как я могу использовать LAST "." так что я получаю $name=pic.n2 и $ext=jpg от: pic.n2.jpg?

+1

Вы работаете с локальным файлом или случайным текстом? – Morgon

+0

Возможный дубликат [Как извлечь расширение файла в PHP?] (Http://stackoverflow.com/questions/173868/how-to-extract-a-file-extension-in-php) – Unsigned

ответ

15

Использование pathinfo:

$pi = pathinfo($name); 
$txt = $pi['filename']; 
$ext = $pi['extension']; 
+0

Удивительный, гораздо более элегантный чем мое решение –

1

Используйте функцию pathinfo() PHP.

Смотреть больше информации здесь http://php.net/manual/en/function.pathinfo.php

$file_part = pathinfo('123.test.php'); 

Пример:

echo $file_part['extension']; 
echo $file_part['filename']; 

Выход:

PHP 123.test

5

использование этого

$array = explode(".", $name); 
end($array);   // move the internal pointer to the end of the array 
$filetype = current($array); 

благодаря

+0

Существует также функция «current» вместо вашего «ключевого» окольного пути получения * текущего элемента *. – deceze

+0

спасибо, что вы правы –

+1

'$ filetype = end ($ array);' также работает. Нет необходимости в последней дополнительной строке. – Giraldi

0

вы можете написать свою собственную функцию, как

функция getExtension ($ s tr) {

$ i = strrpos ($ str, ".");

if (! $ I) {return ""; }

$ l = strlen ($ str) - $ i;

$ ext = substr ($ str, $ i + 1, $ l);

return $ ext;

}

1

Использование Pathinfo или mime_content_type, чтобы получить информацию о типе файла

$filetype = pathinfo($file, PATHINFO_FILENAME); 

$mimetype = mime_content_type($file); 
0

Вы могли бы попробовать что-то вроде этого:

<?php 
$file = 'a.cool.picture.jpg'; 

$ext = substr($file, strrpos($file, '.')+1, strlen($file)-strrpos($file, '.')); 
$name = substr($file, 0, strrpos($file, '.')); 
echo $name.'.'.$ext; 
?> 

Основные функции являются strrpos(), который находит последнее вхождение символа (в этом случае «.») и substr(), который возвращает подстроку. Вы находите последнее "." в файле, а sub - строку. Надеюсь, это поможет.

+0

Мне нравится функция разрыва, хотя получение имени файла требует цикла или взлома, тогда как это более важно. (Messy code as it is, given.) – Jason

+0

Вам не нужно указывать третий аргумент 'substr',' substr ($ file, strrpos ($ file, '.') + 1) 'alone отлично подходит для поиска расширение. – deceze

1
<?php 
$path = 'http://www.mytest.com/public/images/portfolio/i-vis/abc.y1.jpg'; 
echo $path."<br/>"; 
$name = basename($path); 
$dir = dirname($path); 
echo $name."<br/>"; 
echo $dir."<br/>"; 
$pi = pathinfo($path); 
$txt = $pi['filename']."_trans"; 
$ext = $pi['extension']; 
echo $dir."/".$txt.".".$ext; 
?> 
0

Лучше использовать одну из представленных выше решений, но есть также решение с использованием функции взрывается:

$filename = "some.file.name.ext"; 
list($ext, $name) = explode(".", strrev($filename), 2); 
$name = strrev($name); 
$ext = strrev($ext); 

То, что это решение делает следующее: 1.
обратной строки , так что это будет выглядеть так: txe.eman.elif.emos
2. Взорвите его, вы получите что-то вроде: $ ext = "txe", $ name = "eman.elif.emos"
3. обратный переменных для получения правильных результатов

Смежные вопросы