Görüntü dosyası uzantısı almak mümkün değildir

3 Cevap php

I'm using Uploadify to upload an image to the server.
The image is uploaded, and placed in the temp folder of the web server.

Şimdi ben gerçek konumu taşımadan beore dosyası ile çalışmak gerekiyor ve ben aşağıdaki kodu var:

// Get the filepath and filename from server temp dir
$sourceFile   = $_FILES[ 'Filedata' ][ 'tmp_name' ]; // e.g. c:\server\path\tmp\php159.tmp

// Solution 1 for getting file extension
$fileExt1     = pathinfo($sourceFile, PATHINFO_EXTENSION); // <-- This only returns .tmp

// Solution 2 with getimagesize
list(,,$extension) = getimagesize($sourceFile);
$fileExt2     = $extension; // this only returns the number 2.

// Solution 3 with getimagesize
$img = getimagesize($sourceFile);
$fileExt3 = $img[2]; // this only returns the number 2.

Bir kullanıcı dosya herhangi bir isim olabilir, çünkü ben, dosya okumak için regex kullanarak değilim, bu yüzden dosya verilerini okumak zorunda.

Herhangi sugegstions kimse?

3 Cevap

Peki, ilk $ sourceFile kapalı $_FILES['Filedata']['name'] yerine $_FILES['Filedata']['tmp_name'] olmalı ama only for your first solution.

Şimdi çözüm / sorunları ile ilgili:

  1. pathinfo($sourceFile, PATHINFO_EXTENSION); / / şimdi çalışmalı
  2. getimagesize(), ikinci endeksindeki görüntü türünü gösteren bir sabit döner
  3. 2 noktasında aynı

Bu işleve erişimi varsa, bu şekilde daha iyi yapmalıdır, exif_imagetype() getimagesize() ikinci endeksi tam olarak aynı bilgileri verir unutmayın.

Şimdi görüntü sabitleri için, en yaygın üç şunlardır:

  • IMAGETYPE_GIF = 1
  • IMAGETYPE_JPEG = 2
  • IMAGETYPE_PNG = 3

Denetleme böyle bir şey yapıyor gibi basittir:

switch (exif_imagetype($_FILES['Filedata']['tmp_name']))
{
    case IMAGETYPE_GIF:
        echo 'is a GIF';
    break;

    case IMAGETYPE_JPEG:
        echo 'is a JPEG';
    break;

    case IMAGETYPE_PNG:
        echo 'is a PNG';
    break;

    case default:
        echo 'is something else;
    break;
}

One more thing, it's better to use getimagesize() / exif_imagetype() uzatma kolayca değiştirilebilir beri, dosya uzantısı güvenmek daha.

Zaten çözümleri # 2 ve # 3 iş hem de. Dan the getimagesize() manual page:

Returns an array with 7 elements.
...
Index 2 is one of the IMAGETYPE_XXX constants indicating the type of the image.

A. Gif için Öyleyse bu tamsayı 2 olmalıdır. Zaten gd kütüphanesini kullanarak bu yana dosya uzantısı kullanımını image_type_to_extension() almak için. örn.

$img = getimagesize($sourceFile);
$fileExt = image_type_to_extension($img[2])

exif_imagetype() grafik formatları bir dizi belirlemek, hızlı ve hatta GD kullanmak değildir.

Düzenleme: Ben zaten (getimagesize kullanıyorsanız görmek) ve sorun sabitleri çeviri var. Yukarıda bağlantılı exif_imagetype () sayfa yanı) (getimagesize için geçerli olması gereken tüm döndürülen resim türlerinin bir çevirisi vardır.