Nasıl sadece php upload belirli dosya türlerini izin verebilir?

2 Cevap php

Ben kullanıcı bir dosya upload bir sayfa yapıyorum. Dosya türü bir şey diğer jpg, gif, pdf ve eğer ben bir $ hata değişkeni oluşturmak için bir if deyimi istiyorum.

İşte benim kod:

$file_type = $_FILES['foreign_character_upload']['type']; //returns the mimetype

if(/*$file_type is anything other than jpg, gif, or pdf*/) {
  $error_message = 'Only jpg, gif, and pdf files are allowed.';
  $error = 'yes';
}

Ben zorluk eğer deyimi yapılandırılmasında yaşıyorum. Bunu nasıl söyleyebilirim?

2 Cevap

edit

Ben sadece siz de PDF dosyalarını izin vermek istediğiniz gerçekleştirdi. Bu durumda kontrol PHP's Fileinfo class and functions. Ama bildiğim kadarıyla güvenlik gider gibi, hala $_FILES[]['type'] :) güvenmemelisiniz

Ben bu soruya bulduğu başkası yardımcı olur burada durumda kalan bırakacağım


Görüntünün mime türünü denetlemek için $_FILES[]['type'] güvensiz olabilir. Bu veriler tarayıcı tarafından gönderilen ve kolayca sahte olabilir.

Sadece görüntüleri (onun belki yanıltıcı adını rağmen) yüklenmesine izin vermek istiyorsanız getimagesize() işlevini kullanmanız gerekir. Bu fonksiyon, sadece size muhtemelen görüntü hakkında ihtiyacınız olacak boyutunu ancak tüm verileri vermeyecektir.

Ben bir görüntü işleme sınıfında aşağıdaki komut kullanılır:

private function load_image_data($image_file) {

    // Firstly, to disambiguate a loading error with a nonexistant file error,
    // check to see if the file actually exists.
    if( ! file_exists($image_file) ) {
        throw new Nonexistent_Image_Exception("The file '{$image_file}' does not exist");
    }

    // We're going to check the return value of getimagesize, so we don't
    // need any pesky warnings or notices popping up, since we're going to
    // stop execution of this function if something goes wrong.
    $image_data = @getimagesize($image_file);

    if( $image_data === false ) {
        throw new Load_Image_Exception("Could not get image data from '{$image_file}'");
    }

    $this->size = new Dimensions($image_data[0], $image_data[1]);
    $this->mime = $image_data['mime'];

}

getimagesize() a 'MIME' dizini içeren bir ilişkisel dizi döndürür dikkat edin. Burada veri güvenilirdir.

Başka bir işlevin ben görüntünün mim türünü kontrol ve uygun GD fonksiyonu ile PNG onu dönüştürülür:

private function load_image($image_file) {

    // Suppress warning messages because we're going to throw an
    // exception if it didn't work instead.
    switch( $this->mime ) {
    case 'image/jpeg':
    case 'image/pjpeg':
        $this->image = @imagecreatefromjpeg($image_file);
        break;
    case 'image/gif':
        $this->image = @imagecreatefromgif($image_file);
        break;
    case 'image/png':
        $this->image = @imagecreatefrompng($image_file);
        break;
    default:
        throw new Invalid_Image_Exception("The image was of an invalid type");
    }

    if( $this->image === false ) {
        throw new Load_Image_Exception("Loading of image '{$image_file}' failed");
    }

}

Muhtemelen tüm bu yapmak gerekmez, ama türleri belirttiğiniz filetypes için görünür ne mim görebilirsiniz. Bir jpeg iki farklı MIME türleri olabilir dikkat edin.

Umarım bu yardımcı olur.