Этот вопрос вы можете прочитать везде в Интернете с различными ответами:
$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];
и т.п.
Тем не менее, всегда есть «лучший способ», и он должен быть в переполнении стека.
php
file-extension
е-удовлетворяться
источник
источник
strrchr($filename, '.');
Ответы:
Люди из других языков сценариев всегда думают, что их лучше, потому что у них есть встроенная функция, а не PHP (я сейчас смотрю на Pythonistas :-)).
На самом деле, оно существует, но мало кто это знает. Знакомьтесь
pathinfo()
:Это быстро и встроенно.
pathinfo()
может дать вам другую информацию, такую как канонический путь, в зависимости от константы, которую вы передаете ей.Помните, что если вы хотите иметь возможность работать с не ASCII-символами, вам нужно сначала установить локаль. НАПРИМЕР:
Также обратите внимание, что это не учитывает содержимое файла или mime-тип, вы получаете только расширение. Но это то, что вы просили.
Наконец, обратите внимание, что это работает только для пути к файлу, а не для пути к ресурсам URL, который покрывается с помощью PARSE_URL.
наслаждаться
источник
function get_ext($fname){ return substr($fname, strrpos($fname, ".") + 1); }
убедитесь, что файл имеет расширение, однако он может делать что угодно, когда вы передаете путь в качестве аргумента!pathinfo()
источник
echo pathinfo('/foo/bar/baz.bill')['extension'];
Пример URL:
http://example.com/myfolder/sympony.mp3?a=1&b=2#XYZ
А) Не используйте предложенные небезопасные
PATHINFO
:Б) Используйте PARSE_URL :
БОНУС: Просмотреть все нативные примеры PHP
источник
foo_folder/foo-file.jpg?1345838509
треском провалится с простоpathinfo
, спасибоparse_url
для URL иpathinfo
для пути к файлу.Также есть
SplFileInfo
:Часто вы можете написать лучший код, если передаете такой объект вместо строки. Ваш код более понятен. Начиная с PHP 5.4 это однострочный текст:
источник
->getExtension()
доступно в SplFileInfo начиная с PHP 5.3.6.Ответ E-удовлетворительного является правильным способом определения расширения файла.
В качестве альтернативы, вместо того, чтобы полагаться на расширение файлов, вы можете использовать fileinfo для определения типа файлов MIME.
Вот упрощенный пример обработки изображения, загруженного пользователем:
источник
Пока он не содержит путь, вы также можете использовать:
Где
$fname
это имя файла, например:my_picture.jpg
. И результат будет:jpg
источник
1) Если вы используете (PHP 5> = 5.3.6), вы можете использовать SplFileInfo :: getExtension - Получает расширение файла.
Пример кода
Это будет выводить
2) Другой способ получить расширение, если вы используете (PHP 4> = 4.0.3, PHP 5) - это pathinfo
Пример кода
Это будет выводить
// РЕДАКТИРОВАТЬ: убрал скобку
источник
Иногда полезно не использовать
pathinfo($path, PATHINFO_EXTENSION)
. Например:Также обратите внимание, что
pathinfo
не удается обработать некоторые не-ASCII символы (обычно это просто подавляет их из вывода). В расширениях это, как правило, не проблема, но не больно осознавать это предостережение.источник
test.19-02-2014.jpeg
ltrim(strrchr($PATH, '.'),'.')
работает как pathinfo, но без токенизации всего.Самый простой способ получить расширение файла в PHP - использовать встроенную в PHP функцию pathinfo .
источник
Вы также можете попробовать это (это работает на PHP 5. * и 7):
Совет: он возвращает пустую строку, если файл не имеет расширения
источник
Извините ... "Короткий вопрос; но НЕ короткий ответ"
Пример 1 для PATH
Пример 2 для URL
Вывод примера 1:
Вывод примера 2:
Ссылки
https://www.php.net/manual/en/function.pathinfo.php
https://www.php.net/manual/en/function.realpath.php
https://www.php.net/manual/en/function.parse-url.php
источник
Быстрое исправление будет что-то вроде этого.
источник
$file_ext = end(explode('.', $filename));
все, что в этом ответе, в одной строке вместо четырех..tar.gz
. Это не будет работать, поэтому, если вам нужно получить полное расширение, используйте его, например,ltrim(strstr($filename, '.'), '.');
чтобы получить полное расширение вместо неправильноgz
.Вот пример. Предположим, что $ filename это "example.txt",
Так что $ ext будет ".txt".
источник
pathinfo - это массив. Мы можем проверить имя каталога, имя файла, расширение и т.д .:
источник
источник
Вы можете попробовать также это:
источник
источник
Это будет работать
источник
Я обнаружил , что
pathinfo()
иSplFileInfo
решение хорошо подходит для стандартных файлов в локальной файловой системе, но вы можете столкнуться с трудностями , если вы работаете с удаленными файлами , поскольку URL - адрес для действительных изображений могут иметь#
(идентификаторы фрагментов) и / или?
(параметры запроса) в конце URL, который оба эти решения (неверно) будут рассматривать как часть расширения файла.Я обнаружил, что это был надежный способ использования
pathinfo()
URL-адреса после первого его анализа, чтобы удалить ненужный беспорядок после расширения файла:источник
Использование
substr($path, strrpos($path,'.')+1);
. Это самый быстрый метод из всех сравнений.@ Курт Чжун уже ответил.
Давайте проверим сравнительный результат здесь: https://eval.in/661574
источник
Вы можете получить все расширения файлов в определенной папке и выполнять операции с определенным расширением файла:
источник
Делай это быстрее.
Звонки на низком уровне должны быть очень быстрыми, поэтому я подумал, что это стоит того, чтобы провести исследование. Я попробовал несколько методов (с различной длиной строки, длиной расширения, несколькими прогонами каждый), вот несколько разумных:
Результаты были не очень удивительными. Плохой
pathinfo
(безусловно!) Самый медленный (похоже, он пытается разобрать все это, а затем отбросить все ненужные части) - иmethod3()
(strrpos) самый быстрый, безусловно:ПРИМЕЧАНИЕ: первый метод имеет побочный эффект: он возвращает полное имя, когда нет расширения. Конечно, не имеет смысла измерять это дополнительными strpos, чтобы избежать такого поведения.
Вывод
Это похоже на Путь Самурая:
источник
Если вы ищете скорость (например, в маршрутизаторе), вы, вероятно, не хотите, чтобы все токенизировались. Многие другие ответы не удастся с
/root/my.folder/my.css
источник
Хотя «лучший способ» является дискуссионным, я считаю, что это лучший способ по нескольким причинам:
tar.gz
источник
IMO, это лучший способ, если у вас есть имена файлов, такие как name.name.name.ext (некрасиво, но иногда бывает):
источник
$ext = preg_replace('/^.*\.([^.]+)$/D', '$1', $fileName);
Подход preg_replace мы используем поиск и замену регулярного выражения. В функции preg_replace первый параметр - это шаблон для поиска, второй параметр $ 1 - это ссылка на все, что соответствует первому (. *), А третий параметр - имя файла.
Другой способ, мы также можем использовать strrpos, чтобы найти позицию последнего вхождения '.' в имени файла и увеличьте эту позицию на 1, чтобы она взорвала строку из (.)
$ext = substr($fileName, strrpos($fileName, '.') + 1);
источник
На самом деле, я искал это.
источник
использование
для быстрого поиска по расширению (если вы точно знаете, что имя вашего файла есть).
источник