2012-02-12 2 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

Я не согласен, что это дубликат. ОП запрашивает объяснение конкретной реализации здесь, как прокомментировано в коде выше ... –

+0

Я тоже согласен - я не думаю, что это дубликат. Это правильный вопрос, просто интересно вслух, почему OP все еще возится с ним. Я хотел бы отменить (слишком поспешное) закрытое голосование, но мой первоначальный комментарий все еще стоит. – rdlowrey

ответ

2

Наиболее очевидной причиной не использования этого метода является то, что split() function is deprecated in PHP 5.3, и будет удален в более поздних версиях. Его нельзя использовать, поскольку функция будет уходить.

Кроме того, если имя файла не имеет расширения, вы получите уведомление Undefined index при попытке получить доступ к внутреннему номеру от $exts[$n], так как $exts[-1] не установлен. Это произойдет потому, что массив $exts пуст (count($exts) === 0), когда в имени файла нет ., но код не учитывает эту возможность.

+0

+1 подробный информация. – rdlowrey

0

Все эти подходы, и вам не хватает встроенной функции:

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

Это не сразу ответить на ваш вопрос о количестве подход # 5 ... но почему ты возился со всеми эти методы и игнорирование того, что PHP явно предоставляет для этого?

Смежные вопросы