PHP - удаление расширения из строки имени файла
Я хочу удалить расширение из имени файла и получить имя файла - например. file.xml → file, image.jpeg → image, test.march.txt → test.march и т.д.
Итак, я написал эту функцию
function strip_extension($filename) {
$dotpos = strrpos($filename, ".");
if ($dotpos === false) {
$result = $filename;
}
else {
$result = substr($filename,0,$dotpos);
}
return $result;
}
Возвращает пустую строку.
Я не вижу, что я делаю неправильно?
Ответы
Ответ 1
Ищем pathinfo
, я верю. Из руководства:
<?php
$path_parts = pathinfo('/www/htdocs/inc/lib.inc.php');
echo $path_parts['dirname'], "\n";
echo $path_parts['basename'], "\n";
echo $path_parts['extension'], "\n";
echo $path_parts['filename'], "\n"; // since PHP 5.2.0
?>
Результат:
/www/htdocs/inc
lib.inc.php
php
lib.inc
Сохраните головную боль и используйте уже построенную функцию.; -)
Ответ 2
Вы должны использовать pathinfo
, который сделан для этого.
Пример:
Используемые вещи: pathinfo()
$name = 'file.php';
$pathInfo = pathinfo($name);
echo 'Name: '. $pathInfo['filename'];
Результаты:
Name: file
Пример 2 (короче)
$name = 'file.php';
$fileName= pathinfo($name, PATHINFO_FILENAME );
echo "Name: {$fileName}";
Результаты:
Name: file
Живые примеры:
Нет. 1 |
Нет. 2
Ответ 3
Эта очень простая функция выполняет трюк:
function strip_extension($filename)
{
$extension = pathinfo($filename, PATHINFO_EXTENSION);
$regexp = '@\.'.$extension.'[email protected]';
return preg_replace($regexp, "", $filename);
}
Ответ 4
Вот короткий. Просто знайте, пройдете ли вы путь, вы потеряете информацию о пути:)
function stripExtension($filename) {
return basename($filename, '.' . pathinfo($filename, PATHINFO_EXTENSION));
}
CodePad.
Единственное реальное преимущество этого заключается в том, что вы используете < PHP 5.2.
Ответ 5
function strip_extension($filename){
if (isset(pathinfo($filename)['extension'])) { // if have ext
return substr($filename, 0, - (strlen(pathinfo($filename)['extension'] +1)));
}
return $filename; // if not have ext
}
Вы должны проверить, имеет ли имя файла расширение, чтобы не иметь ошибок с pathinfo. Как объяснено в http://php.net/manual/en/function.pathinfo.php
Ответ 6
Вероятно, не самый эффективный, но на самом деле он отвечает на вопрос.
function strip_extension($filename){
$f = array_reverse(str_split($filename));
$e = array();
foreach($f as $p){
if($p == '.'){
break;
}else{
array_push($e,$p);
}
}
return implode('',array_reverse($e));
}