PHP bir dosya uzantısı nasıl ayıklanır?

8 Cevap php

Bu çeşitli cevaplar ile web üzerinde her yerde okuyabilirsiniz bir soru:

$ext = end(explode('.', $filename));
$ext = substr(strrchr($filename, '.'), 1);
$ext = substr($filename, strrpos($filename, '.') + 1);
$ext = preg_replace('/^.*\.([^.]+)$/D', '$1', $filename);
$exts = split("[/\\.]", $filename);
$n = count($exts)-1;
$ext = $exts[$n];

vb

Ancak, "en iyi yol" her zaman ve stackoverflow olmalıdır.

8 Cevap

Diğer betik dilleri insanların her zaman bir o değil, PHP (ben :-) şu anda Pythonistas bakıyorum) yapmak için fonksiyon inşa çünkü onların daha iyi olduğunu düşünüyorum.

Aslında, var yok, ancak birkaç kişi biliyorum. Tanışma pathinfo() :

$ext = pathinfo($filename, PATHINFO_EXTENSION);

Bu, hızlı, verimli, güvenilir ve yerleşik olduğunu. pathinfo(), kendisine iletmek sürekli bağlı olarak, örneğin kanonik yolu gibi, size diğer bilgi verebilir.

Hoşlanmak

pathinfo()

Bir örnek ...

$path_info = pathinfo('/foo/bar/baz.bill');

echo $path_info['extension']; // "bill"

E-satis yanıt dosya uzantısını belirlemek için doğru bir yoldur.

Alternatif olarak, yerine bir dosya uzantısı güvenmek, dosyaların MIME türünü belirlemek için FileInfo (http://us2.php.net/fileinfo) kullanabilirsiniz.

Burada bir kullanıcı tarafından yüklenen bir görüntü işleme basitleştirilmiş bir örnek:

// Code assumes necessary extensions are installed and a successful file upload has already occurred

// Create a FileInfo object
$finfo = new FileInfo(null, '/path/to/magic/file');

// Determine the MIME type of the uploaded file
switch ($finfo->file($_FILES['image']['tmp_name'], FILEINFO_MIME) {
    case 'image/jpg':
        $im = imagecreatefromjpeg($_FILES['image']['tmp_name']);
    break;

    case 'image/png':
        $im = imagecreatefrompng($_FILES['image']['tmp_name']);
    break;

    case 'image/gif':
        $im = imagecreatefromgif($_FILES['image']['tmp_name']);
    break;
}

Bazen, örneğin, pathinfo($path, PATHINFO_EXTENSION) kullanmak için değil yararlıdır:

$path = '/path/to/file.tar.gz';

echo ltrim(strstr($path, '.'), '.'); // tar.gz
echo pathinfo($path, PATHINFO_EXTENSION); // gz

Ayrıca pathinfo, bazı ASCII olmayan karakterler genellikle bir sorun değildir uzantıları, (genellikle sadece çıkış onları bastırır) ama o ihtar haberdar olmak için zarar vermez işlemek için başarısız unutmayın .

Bu iyi yoludur:

$filename = 'hello.txt';
$ext = pathinfo($filename, PATHINFO_EXTENSION);
echo $ext;

Yukarıdaki kod baskı txt

Sürece yolunu içermiyor olarak da kullanabilirsiniz:

array_pop(explode('.',$fname))

Where $fname is a name of the file, for example: my_picture.jpg And the outcome would be: jpg

Kullanım

str_replace('.', '', strrchr($file_name, '.'))

hızlı bir uzantısı alımı için (emin biliyorum eğer dosya adı birine sahiptir).