2010-12-13 50 views

回答

9

使用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 
?> 

注意:如果你不是在PHP> = 5.2使用此來組成

$path_parts['filename'] = substr($path_parts['basename'], 0, -1*strlen($path_parts['extension'])-1); 
+0

+1爲內置功能,而不是更復雜和容易出錯的替代方案 – 2010-12-13 09:35:49

-3

我用:

$file_name = current(explode(".", $file_name)); 
+0

是更好地使用這種 – 2010-12-13 09:32:18

+0

那麼什麼用,如文件名的' foo.bar.txt'? – Joey 2010-12-13 09:33:18

+0

這會給你任何東西,直到第一個'.'。 「my.strange.path/i.like.dots.php」會發生什麼? – 2010-12-13 09:34:19

1

你應該看看pathinfo()功能。

+0

@Salman答:究竟是什麼對我發佈的鏈接這麼無禮?哪個鏡像鏈接是否真的很重要? – AgentConundrum 2010-12-13 09:36:01

+0

我已經恢復了更改。 – 2010-12-13 09:45:02

+0

@Salman:我自己可以做到這一點。我只是想知道*爲什麼*你認爲有必要。 – AgentConundrum 2010-12-13 09:57:23

1
substr($file_name, 0, -4); 
+0

'archive.tar.gz'怎麼樣? – Gordon 2010-12-13 09:49:25

+0

你是對的!唯一安全的方法是不使用pathinfo() – 2010-12-13 10:21:37

+0

。本網站其他地方給出的pathinfo解決方案將在這種情況下返回「archive.tar」。 Afaik沒有可靠的解決方案來處理雙重擴展;) – Gordon 2010-12-13 23:26:35

2

你可以這樣做:

$file_name_no_ext = pathinfo($file_name , PATHINFO_FILENAME); 
0

類似@fire,但更強大的面對多重點:

$comps = explode('.', $filename); 
unset($comps[count($comps) - 1]); 
$ext = implode('.', $comps);