PHP soru Forum Eklenti Özellik Yardımı

3 Cevap

HI

I have a forum and I'm trying to think of how to do an "attachment" feature. You know if you make a thread you can chose to upload a file and attach it in the thread.

Ben tablo dosyaları dosya id kimlikli bir tablo denilen eki yapmak gerekir? Nedir en iyi yolu. Ve ben fazla 1 eki upload edebilmek istiyorum. ve bir resim gösterisi resmin küçük bir minyatür eğer.

Dosya vb varsa nasıl kontrol etmelisiniz? Bunu nasıl yapardın?

Benim kötü İngilizce için özür dilerim

3 Cevap

Ben dürüst 'Ekleri' diyor mesajların masada bir sütun oluşturmak ve sonra ek dosya adlarının virgülle ayrılmış dize yapardın

file1.png,file2.png,file3.png

Eğer PHP içine almak zaman sonra, sadece onu patlayabilir

$attachments = explode(',', $string);

ve zaten yükleme dizinine koyduk her dosya için kontrol edin:

foreach($attachments as $file)
{
    if(!is_file($upload_directory.$file))
    {
        $error[] = $file . " is not a valid attachment";
        // run cleanup script
    }
}

Ekleri almak için, gerçekten basit bir kod, ama gelen dosyayı doğrulamak ve sterilize gerekir.

foreach($_FILES as $array)
{
    // Sanitize Here
    die("SANITIZE HERE!");

    move_uploaded_file($array['tmp_name'], $upload_dir);
}

Çok geniş soru ama size bazı öneriler vermek gerekir:

  • diskteki görüntüleri depolamak gibi bir şey / uploads/--thread_id--/1.jpg, / uploads/--thread_id--/2.jpg ve herhangi bir değişiklik yapmak zorunda kalmamak üzerine (bu şekilde DB)

Yükleme işlemi, doğrulama ve (ben bu sırayla onları okumanızı öneririz) daha fazla okuyabilirsiniz resim boyutlandırma ile ilgili:

http://pt.php.net/manual/en/function.exif-imagetype.php -> image validation
http://php.net/manual/en/function.move-uploaded-file.php -> upload process
http://pt.php.net/manual/en/book.image.php -> image resizing & manipulation

Chacha planı bana iyi geliyor, ancak dikkatli olmak zorunda. Kaydetmek dosyaları herhangi bir yürütme izinleri ve dosya sunucusu üzerinde bir web erişilebilir dizinde olmadığından değil emin olun. Ben güvenlik amaçlı web dizini daha yüksek bir dizine yükleme dizini koymak gerektiğini düşünüyorum.

Dosyaları kaydetmek için başka bir olası yol: veritabanında lekeler kendi ikili kodu kaydetmek. Ben bu yöntem için herhangi bir avantajı var ise emin değilim, ama ben şahsen dosya yükleme ile uğraşmak zorunda değil.

Her şeyden önce, yüklenen veri ile dikkatli olun!