PHP - удаление расширения из строки имени файла - PullRequest
10 голосов
/ 05 мая 2011

Я хочу удалить расширение из имени файла и получить имя файла - например, 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;
}

Возвращает пустую строку.

Я не вижу, что я делаю не так?

Ответы [ 6 ]

22 голосов
/ 05 мая 2011

Ищу 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

Сохраните головную боль и используйте уже созданную функцию. ; -)

6 голосов
/ 05 мая 2011

Вы должны использовать 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

1 голос
/ 05 мая 2011

Вот короткий.Просто знайте, если вы пройдете путь, вы потеряете информацию о пути:)

function stripExtension($filename) {
   return basename($filename, '.' . pathinfo($filename, PATHINFO_EXTENSION));
}

CodePad .

Единственное реальное преимущество этого - если выработают

1 голос
/ 05 мая 2011

Эта очень простая функция делает свое дело:

function strip_extension($filename)
{
    $extension = pathinfo($filename, PATHINFO_EXTENSION);
    $regexp = '@\.'.$extension.'$@';
    return preg_replace($regexp, "", $filename);
}
0 голосов
/ 09 февраля 2018

Возможно, не самый эффективный, но на самом деле он отвечает на вопрос.

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));
}
0 голосов
/ 13 июня 2017
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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...