poniedziałek,
PHP: Rozszerzenie pliku
Jak ustalić rozszerzenie pliku?
Znajomość rozszerzenia pliku jest wymagana w wielu sytuacjach, np. kiedy chcemy pozwolić użytkownikowi na zmianę nazwy pliku z zachowaniem aktualnego rozszerzenia. Przedstawię aż siedem sposobów, być może alternatywy będą dobrym punktem wyjścia przy rozwiązywaniu podobnego problemu.
Sposoby w wierszach 3-6 ułożone są od optymalnego rozwiązania, metoda z wiersza nr 3 jest bezwzględnie najlepsza w większości przypadków. Zastosowany w wierszu nr 4 typ składni, jest dostępny od PHP 5.5.
Wiersze 7-8 to użycie wyrażeń regularnych. Jak widać wcześniej, nie ma potrzeby uruchamiania aparatu interpretacji wyrażeń regularnych.
Użycie wbudowanej w język PHP klasy SplFileInfo (dostępne w PHP od wersji 5.1.2, wiersz nr 9) może znaleźć zastosowanie przy obiektowym podejściu do programowania, kod będzie jednorodny stylistycznie. Prezentowany styl składni dostępny jest od wersji 5.3.6 języka PHP.
Rozpatrywany problem jest na tyle prosty, że istnieje sposób rozwiązania bez stosowania funkcji w oparciu jedynie o operatory i instrukcje sterujące (wiersze 11-15). Oczywiście konstruowanie takich rozwiązań wymaga już dobrej znajomości języka. Nie jest to też zalecany sposób.
Prezentowane przepisy nie badają typu pliku (nie można ich wykorzystać w celu ustalenia typu pliku). Nie sprawdzą się też w przypadku złożonych rozszerzeń (np. tar.gz). Wymagane wtedy będzie uwzględnienie predefiniowanej listy spotykanych złożonych rozszerzeń. Rozwiązania są doskonałe przy typowych dokumentach (DOC, PDF, JPG itp.).
$plik = 'regulamin-plac.2017.txt';
echo pathinfo($plik, PATHINFO_EXTENSION);
echo pathinfo($plik)['extension'];
echo substr($plik, strrpos($plik, '.') + 1);
echo array_reverse(explode('.',$plik))[0];
preg_match('/.[^.]+$/i',$plik,$ext);
echo $ext[0];
echo (new SplFileInfo($plik))->getExtension();
$ext = '';
for($i=0;@$plik[$i] || @$plik[$i]==='0';$i++) {
if($plik[$i]=='.') $ext = '';
else $ext .= $plik[$i];
}
echo $ext;
Udział wzięli
echo, pathinfo, substr, strrpos, array_reverse, explode, preg_match, splfileinfo, for, if, operators.errorcontrol
Powyższa ramka to odnośniki do właściwych stron dokumentacji języka PHP.