У меня есть этот код PHP:
function ShowFileExtension($filepath)
{
preg_match('/[^?]*/', $filepath, $matches);
$string = $matches[0];
$pattern = preg_split('/\./', $string, -1, PREG_SPLIT_OFFSET_CAPTURE);
if(count($pattern) > 1)
{
$filenamepart = $pattern[count($pattern)-1][0];
preg_match('/[^?]*/', $filenamepart, $matches);
return strtolower($matches[0]);
}
}
Если у меня есть файл с именем my.zip
, эта функция возвращает .zip
.
Я хочу сделать наоборот, я хочу, чтобы функция возвращалась my
без расширения.
Файл - это просто строка в переменной.
Ответы:
Нет необходимости во всем этом. Проверьте pathinfo () , он дает вам все компоненты вашего пути.
Пример из руководства:
Вывод кода:
И наоборот, вы можете получить только определенные части, такие как:
источник
basename
. Нет неправильного названия.В качестве альтернативы
pathinfo()
вы можете использоватьbasename()
- возвращает имя файла компонента путиПример из руководства по PHP
Вы должны знать расширение, чтобы удалить его заранее, хотя.
Тем не менее, поскольку ваш вопрос говорит о том, что вам нужно получить расширение и базовое имя, я бы оценил ответ Пекки как наиболее полезный, потому что он даст вам любую информацию о пути и файле, которую вы хотите получить, с одним родным функция.
источник
basename
, но,pathinfo
как показано в другом месте, были на странице.https://php.net/manual/en/function.pathinfo.php
Простой функциональный тест: https://ideone.com/POhIDC
источник
basename
;-)PATHINFO_FILENAME
неPATHINFO_EXTENSION
....filename
него нет расширения, уbasename
него должны быть некоторые садистские тенденции ...Другой подход заключается в использовании регулярных выражений.
Это удаляет с последнего периода
.
до конца строки.источник
$fileName
который мог бы заставить двигатель работать в экспоненциальном (или худшем) времени. И, предполагая, что мы закончили анализ внутренних элементов этого конкретного механизма регулярных выражений и теоретически доказали, что он устойчив к любым возможным значениям$fileName
, код все еще не может быть произвольно переносим на другую платформу, которая имеет другую реализацию механизма регулярных выражений.Если расширение не известно, используйте это решение
PHP MAN функция pathinfo
источник
pathinfo
. Это поможет OPShowFileExtension
улучшить метод и обеспечит дополнительное чтение для всех, кто пытается найти этот ответ. Также немного описания не сбилось бы с пути ...@Gordon basename будет работать нормально, если вы знаете расширение, если вы не можете использовать explode:
источник
pathinfo
, поэтому я дал толькоbasename
в качестве альтернативы. Нет необходимости заново изобретатьpathinfo
с помощью регулярных выражений илиexplode
.end(explode(".", $file));
дает вам расширение, а не имя файла.Почти все вышеприведенные решения имеют показанное имя файла из переменной $ path
Ниже приведен фрагмент текущего имени исполняемого файла без расширения.
объяснение
источник
Там нет необходимости писать много кода. Даже это может быть сделано только одной строкой кода. Смотри здесь
Ниже приведен однострочный код, который возвращает только имя файла и удаляет расширение:
Будет печатать
Источник: Удалить расширение и вернуть только имя файла в PHP
источник
@fire, если имя файла использует точки, вы можете получить неправильный вывод. Я бы использовал метод @Gordon, но тоже получил расширение, поэтому функция basename работает со всеми расширениями, например так:
источник
в моем случае я использую ниже. Мне все равно, что это такое. Я думаю, это поможет вам
источник
$extenion
Вы можете написать это
Они вернут текущий элемент массива, если не использовались ранее.
источник
короткий
источник
b.php
и я казненa.php
имеяrequire('b.php')
. Тогда выходной будет какb
вместоa
Имя файла без расширения, если вы не знаете это расширение:
$basename = substr($filename, 0, strrpos($filename, "."));
источник
Если вы не знаете, какое у вас расширение, вы можете попробовать это:
Работаем со всеми возможностями:
источник
Ваш ответ ниже идеального решения, чтобы скрыть расширение файла в php.
источник
Существующие решения дают сбой, когда есть несколько частей расширения. Функция ниже работает для нескольких частей, полного пути или только имени файла:
источник
Это возвращает только имя файла без какого-либо расширения в 1 строке:
источник