Projektowanie stron WWW od podszewki

Artykuły na każdy temat

[PHP] Pobieranie rozszerzenia pliku z podanej ścieżki

Dodano 17.08.2010r. o 18:47
Zapewne metod jest o wiele więcej Razz ja wyłuskałem tylko pare. Liczę na Wasza inwencję.
Kod:
<?php
function first_method($path)
{
 return substr($path, (strrpos($path'.' ) + 1));
}

function second_method($path)
{
 return substr(strrchr($path'.'), 1);
}

function third_method($path)
{
 return end(explode('.'$path));
}

function fourth_method($path)
{
 return pathinfo($pathPATHINFO_EXTENSION);
}

function fifth_method($path)
{
 return basename($path);
}

function sixth_method($path)
{
 // Imperfectly, but works sometimes Razz
 preg_match('#^(?:.+?)(?:\.([^\.]*))?$#'$path$matches);

 return $matches[1];
}

$some_address[0] = 'http://www.example.com/path/test.ext';
$some_address[1] = 'http://www.example.com/path/test.ext.ext2';
$some_address[2] = 'http://www.example.com/path/.htaccess';
$some_address[3] = 'http://www.example.com/path/test';
$some_address[4] = 'http://www.example.com/path/test.';
$some_address[5] = './test.ext';
$some_address[6] = '/test.ext';
$some_address[7] = 'test.ext.ext2';
// Oczywiście jest więcej kombinacji dlatego proponuje przetestować je osobiście Smile

echo '<pre>';

for($h 0$how count($some_address); $h $how; ++$h)
{
 echo '<div style="color: red">first_method(\''.$some_address[$h].'\') - '.first_method($some_address[$h]).'</div>';
 echo '<div style="color: orange">second_method(\''.$some_address[$h].'\') - '.second_method($some_address[$h]).'</div>';
 echo '<div style="color: green">third_method(\''.$some_address[$h].'\') - '.third_method($some_address[$h]).'</div>';
 echo '<div style="color: blue">fourth_method(\''.$some_address[$h].'\') - '.fourth_method($some_address[$h]).'</div>';
 echo '<div style="color: navy">fifth_method(\''.$some_address[$h].'\') - '.fifth_method($some_address[$h]).'</div>';
 echo '<div style="color: purple; border-bottom: 1px solid black">sixth_method(\''.$some_address[$h].'\') - '.sixth_method($some_address[$h]).'</div>';
}

echo '</pre>';
?>
Użyte w kodzie wyrażenie regularne nie jest perfekcyjne dlatego proponuje poprawić je Razz

Odnośnie większości metod to najlepiej jest po prostu wrzucać nazwę pliku jako parametr. Przypominam, że w Linuxie możemy znaleźć pliki bez rozszerzenia (np. /etc/init.d/README). Jeżeli zamierzasz zezwalać na takie rzeczy to musisz zrobić odpowiednią filtracje. Być może w czasie czytania tego artykułu budujesz upload. Jeżeli tak jest to proponuje także sprawdzanie nagłówku pliku, który bardzo pomaga w detekcji rodzaju zawartości.

Komentarze

Brak komentarzy

Dodaj komentarz

Zostaw komentarz jeżeli możesz! Nie bądź przysłowiowym botem! Nie bądź obojętny! Ciebie to nic nie kosztuje, a mi sprawi uśmiech na twarzy.
Zezwolono używać: BBCode
Zabroniono używać:
znaczników HTML

(Wymagany)

(Wymagany, niepublikowany)

(Nie wymagana)

Token:

Obrazek dla bota

(Przepisz tylko cyfry!)

(Wymagana)