PHP: имя файла без расширения файла - лучший способ?

php

11350 просмотра

4 ответа

Я пытаюсь вытащить имя файла из каталога без расширения.

Я пробиваюсь со следующим:

foreach ($allowed_files as $filename) { 
  $link_filename = substr(basename($filename), 4, strrpos(basename($filename), '.'));
  $src_filename = substr($link_filename, 0, strrpos($link_filename) - 4);
  echo $src_filename;
}

... Но это не может работать, если длина строки расширения больше 3. Я просмотрел документы PHP безрезультатно.

Автор: jml Источник Размещён: 12.11.2019 09:50

Ответы (4)


12 плюса

Решение

У PHP есть удобная pathinfo()функция, которая сделает всю работу за вас здесь:

foreach ($allowed_files as $filename) {
  echo pathinfo($filename, PATHINFO_FILENAME);
}

Пример:

$files = array(
  'somefile.txt',
  'anotherfile.pdf',
  '/with/path/hello.properties',
);

foreach ($files as $file) {
  $name = pathinfo($file, PATHINFO_FILENAME);
  echo "$file => $name\n";
}

Выход:

somefile.txt => somefile
anotherfile.pdf => anotherfile
/with/path/hello.properties => hello
Автор: cletus Размещён: 03.01.2010 03:41

3 плюса

попробуй это

function file_extension($filename){
    $x = explode('.', $filename);
    $ext=end($x);
    $filenameSansExt=str_replace('.'.$ext,"",$filename);
    return array(
        "filename"=>$filenameSansExt,
        "extension"=>'.'.$ext,
        "extension_undotted"=>$ext
        );
}

использование:

$filenames=array("file1.php","file2.inc.php","file3..qwe.e-rt.jpg");
foreach($filenames as $filename){
    print_r(file_extension($filename));
    echo "\n------\n";

}

выход

Array
(
    [filename] => file1
    [extension] => .php
    [extension_undotted] => php
)

------
Array
(
    [filename] => file2.inc
    [extension] => .php
    [extension_undotted] => php
)

------
Array
(
    [filename] => file3..qwe.e-rt
    [extension] => .jpg
    [extension_undotted] => jpg
)

------
Автор: ekhaled Размещён: 03.01.2010 03:43

2 плюса

list ($ file) = explode ('.', $ filename);

Автор: dmitrig01 Размещён: 03.01.2010 03:22

1 плюс

Попробуй это:

$noExt = preg_replace("/\\.[^.]*$/", "", $filename);

Редактировать в ответ на комментарий Cletus:
Вы можете изменить его одним из следующих способов:

$noExt = preg_replace("/\\.[^.]*$/", "", basename($filename));

// or

$noExt = preg_replace("/\\.[^.\\\\\\/]*$/", "", $filename);

Да, PHP нужны литералы регулярных выражений ...

Автор: nickf Размещён: 03.01.2010 03:24
Вопросы из категории :
32x32