PHP: saklamak dosya konumları ... ne üzerine olacak?

3 Cevap php

Şu anda Zend Framework kullanarak ve bir dosya yükleme formu var duyuyorum. Kimliği doğrulanmış bir kullanıcı uygulamada bir dizinde saklanır bir dosya yüklemek için yeteneği ve veritabanında saklanan bir konuma sahiptir. Bu şekilde bu indirilebilir bir dosya olarak görüntülenebilir.

<a href="/upload-location/filename.pdf">Download</a>

Ama ben fark ediyorum bir şey, aynı adı taşıyan bir dosya yüklenenler dizinde bir dosyanın üzerine olacaktır. Orada hiçbir hata mesajı, ne dosya artışı yapar. Yani dosya üzerine (veya tarih asla) gerekir düşünüyorum.

, Yükleme, taşıma veya bu dosyaları saklarken ben farkında olması gereken bazı en iyi uygulamaları nelerdir? Dosya adı her zaman benzersiz olduğunu bu yüzden her zaman dosyaları yeniden adlandırma olmalı?

3 Cevap

Genellikle, kullanıcı tarafından verilen adla dosyaları depolamak, ama adını biz (i.e. our application) chosse kullanarak yok.

Örneğin, bir kullanıcı yüklenenler my_file.pdf, biz olur eğer:

  • store a line in the DB, containing :
    • id; Bir değiştirmemesi, birincil anahtar - "123", örneğin
    • Kullanıcı tarafından verilen isim; Birisi dosyasını indirmek için çalıştığında yüzden doğru isim gönderebilirsiniz
    • dosyanın içerik türü; Mesela böyle application/pdf falan.
    • "Bizim" adı: file-123, örneğin
  • id=123, biz fiziksel dosya ('file-' . $id) ve gönderilen abartılı hangi bilmek ile dosyaya bir istek olduğunda.
  • ve biz iletişim kutusu "olarak kaydetmek" için biz DB saklanan adını kullanarak, tarayıcı "mantıklı" adını düzeltmek için göndermek için bazı başlığını ayarlayabilirsiniz
  • btw, içerik-türü için aynı

Bu şekilde, biz emin olun:

  • Hiçbir dosya bunu tercih olanlar olduğu gibi, herhangi bir "yanlış" adı vardır ve bu istemci değil
  • hiçbir overwritting olduğunu: bizim dosya isimleri bizim tablonun birincil anahtarı dahil olarak, bu dosya adları benzersiz

Pascal Martin cevaba devam:

Adı gibi bir kimliği kullanarak Eğer ayrıca bir dizin adlandırma stratejisi ile gelebilir. Ben artık /somedir/theWholeID daha dosya sistemi /somedir/part1ofID/part2OfID almak için alır ama size yol oluşturmak için kimliği bölünmüş nasıl itibaren aynı dizinde kaç dosya seçin ve izin verir dosya adı.

Yanında iyi bir şey kullanıcı veya dosyayı görmek için yetkili olup olmadığını kullanıcıya aslında çıkış dosyasına kullanın komut seçebilirsiniz olmasıdır. Bu tabii ki varsayılan olarak herkes tarafından okunabilir değil bir yerde saklanacak dosyaları gerektirir.

Ayrıca this other question bakmak isteyebilirsiniz. Tamamen bağlı, ama farkında olmak iyi değil.

Evet benzersiz onlara isim için bir yol ile gelmek gerekir. Ive orignal dosya, db kayıt pk ve yine db rekor onun bağlı veya ilgili kayıtlar içinde varous alanlara dayalı hareketsizliğe bazı türüne,, zaman damgası yüklemek bir karma baz arasında değişen bu için farklı stratejiler her türlü gördük.