Nasıl CodeIgniter dosya yükleme sınıfı yapmak için tüm uzantıları kabul ediyor musunuz?

5 Cevap php

Ben sınıfa hiçbir uzantıları arz Şu anda eğer hiçbir uzantıları sağlar. Ben tüm uzantıları izin istiyorum. Çekirdek hack olmadan bunu yapmak için herhangi bir yolu var mı?

5 Cevap

Codeigniter 2, sadece böyle izin türlerini tanımlamak gerekir:

$config['allowed_types'] = '*';

Doğrudan sorunun cevabı: Hayır, çekirdek kılma olmadan bunu yapmak için hiçbir yolu yoktur

İyi haber size çekirdek hack önleyebilirsiniz edilir, per the manual

As an added bonus, CodeIgniter permits your libraries to extend native classes if you simply need to add some functionality to an existing library. Or you can even replace native libraries just by placing identically named versions in your application/libraries folder.

Yani, kütüphanesi için yedek bir düşüş var, size upload.php kopyalayabilirsiniz edin

application/libraries

sonra klasör ve bu upload.php dosyaya özel mantığı ekleyin. Eğer yükleme kitaplığı yüklenemedi zaman Kod Ateşleyici yerine bu dosyayı içerecektir.

Alternatif olarak, orijinal genişleten KENDİ özel uploader sınıfı oluşturabilirsiniz ve sadece is_allowed_filetype fonksiyonu geliştirir.

application/libraries/MY_Upload.php
class MY_Upload Extends CI_Upload{
    function is_allowed_filetype(){
         //my custom code here
    }
}

Eğer yükseltme konum zaman the changelog üzerinden okumak isteyeceksiniz, ama bu ayrı evrenlerde kodunuzu ve çekirdek kod tutmak sağlayacaktır.

Ben ne olduğunu:

$ext=preg_replace("/.*\.([^.]+)$/","\\1", $_FILES['userfile']['name']);
$fileType=$_FILES['userfile']['type'];
$config['allowed_types'] = $ext.'|'.$fileType;

Yani otomatik olarak izin her işlev çağrısı tüm dosyaları yapar.

Sadece bir hack sayesinde mümkün olacak gibi şimdiye kadar görünüyor.

Ben takılı return true sistemi / kütüphaneleri / upload.php line 556.

Sadece bu durumu değiştirmeniz gerekir:

        if (! $this->is_allowed_filetype())
        {
            $this->set_error('upload_invalid_filetype');
            return false;
        }

Ile:

        if (count($this->allowed_types) && !$this->is_allowed_filetype())
        {
            $this->set_error('upload_invalid_filetype');
            return false;
        }