PHP:没有文件扩展名的文件名 - 最好的方法?
问题描述:
我想拉出一个没有扩展名的目录的文件名。PHP:没有文件扩展名的文件名 - 最好的方法?
我用下面通过kludging我的方式:
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文件没有无法正常工作无济于事。
答
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
答
试试这个:响应于克莱的评论
$noExt = preg_replace("/\\.[^.]*$/", "", $filename);
编辑:
你可以在短短的方法之一更改:
$noExt = preg_replace("/\\.[^.]*$/", "", basename($filename));
// or
$noExt = preg_replace("/\\.[^.\\\\\\/]*$/", "", $filename);
是,PHP需要正则表达式文字.. 。
答
尝试这种
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
)
------
pathinfo($ filename,PATHINFO_BASENAME)和basename($ filename)有什么区别? – jml 2010-01-03 03:42:36
我的错别字。 PATHINFO_BASENAME与basename()相同。它是你想要(更新)的PATHINFO_FILENAME。 – cletus 2010-01-03 03:45:37
这太棒了。谢谢。 – jml 2010-01-03 03:48:03