2012-02-12 4 views
0
$filename = 'mypic.gif'; 

// 1. The "explode/end" approach 
$ext = end(explode('.', $filename)); 

// 2. The "strrchr" approach 
$ext = substr(strrchr($filename, '.'), 1); 

// 3. The "strrpos" approach 
$ext = substr($filename, strrpos($filename, '.') + 1); 

// 4. The "preg_replace" approach 
$ext = preg_replace('/^.*\.([^.]+)$/D', '$1', $filename); 

// 5. The "never use this" approach.  
    //   From: http://php.about.com/od/finishedphp1/qt/file_ext_PHP.htm 
$exts = split("[/\\.]", $filename); 
$n = count($exts)-1; 
$ext = $exts[$n]; 

私は問題5を説明することができますか? また、決してアプローチを使用しないこととはどういう意味ですか?ファイルからの延長の取得

+1

あなたの[類似の行に沿った前の質問](http://stackoverflow.com/questions/9251707/removing-extensions-from-filename)が正確な複製として閉じられている場合は、おそらく指定された複製からの回答を使用するべきです質問の回答か、あなたの前の質問からの最初のコメントが高くなっていますか? – rdlowrey

+0

これは重複していると私は一種同意しない。 OPは、上のコードでコメントされているように、ここで具体的な実装の説明を求めています... –

+0

私も同意します - 私はそれが重複しているとは思わない。これは正当な疑問です。なぜOPがまだそれをいじっているのか大声で驚いています。私は(過度に急いで)近い投票を取り消したいが、私の元のコメントはまだ立っている。 – rdlowrey

答えて

2

この方法を使用しない最も明白な理由は、split() function is deprecated in PHP 5.3であり、それ以降のバージョンでは削除されます。機能がなくなるので使用しないでください。

さらにファイル名に拡張子がない場合、$exts[$n]から拡張子にアクセスしようとすると、$exts[-1]が設定されていないため、Undefined index通知が表示されます。これは、ファイル名に.が存在しない場合、$exts配列が空(count($exts) === 0)であるために発生しますが、そのコードはその可能性を考慮していません。

+0

+1完全な説明。 – rdlowrey

0

すべてのこれらのアプローチ、そしてあなたは、組み込みの機能が欠落している:

$filename = 'mypic.gif'; 
$extension = pathinfo($filename,PATHINFO_EXTENSION); 
var_dump($extension); 

これは、直接アプローチ番号#5についての質問に答えていない...しかし、なぜあなたはすべてでふざけるされていますこれらのメソッドとPHPが明示的にこれを行うために何をあなたのために無視する?

関連する問題