2010-01-03 61 views
4

我想拉出一個沒有擴展名的目錄的文件名。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文件沒有無法正常工作無濟於事。

回答

11

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 
+0

pathinfo($ filename,PATHINFO_BASENAME)和basename($ filename)有什麼區別? – jml 2010-01-03 03:42:36

+0

我的錯別字。 PATHINFO_BASENAME與basename()相同。它是你想要(更新)的PATHINFO_FILENAME。 – cletus 2010-01-03 03:45:37

+0

這太棒了。謝謝。 – jml 2010-01-03 03:48:03

2

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

+0

怎麼樣'blah.class.php'? – nickf 2010-01-03 03:23:14

+0

嗨德米特里01- 什麼是列表($文件)在這種情況下?任何變量? – jml 2010-01-03 03:24:03

+0

我會這樣做,並刪除爆炸後的最後一個元素。 – wenbert 2010-01-03 03:26:37

1

試試這個:響應於克萊的評論

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

編輯:
你可以在短短的方法之一更改:

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

// or 

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

是,PHP需要正則表達式文字.. 。

+0

我把它拿回來 - 如果你使用basename($ filename) – jml 2010-01-03 03:30:47

+0

完全有效。我發現這是最有用的,因爲你正在操作字符串本身。當你確切知道你需要修改什麼字符串時,採取正則表達式的方法似乎是非常有用的。 – jml 2010-01-03 03:56:08

+0

-1這是一個很好的例子,爲什麼你不應該重新發明PHP用內置函數做的事情。那麼字符串「/some/path.to/afile」呢? – cletus 2010-01-03 04:09:55

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 
) 

------ 
+0

謝謝你。很高興知道如何用自定義函數解決問題。 – jml 2010-01-03 03:51:26

+0

這給出了一個完整和清晰的例子。 – wenbert 2010-01-03 18:20:04