PHP:没有文件扩展名的文件名 - 最好的方法?

时间:2010-01-03 03:18:46

标签: php

我试图将文件名从没有扩展名的目录中拉出来。

我正在通过以下方式解决问题:

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文档中四处查看无济于事。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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
)

------

答案 2 :(得分:2)

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

答案 3 :(得分:1)

试试这个:

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

编辑回应cletus的评论:
您可以通过以下几种方式之一进行更改:

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

// or

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

是的,PHP需要正则表达式文字......