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));
}