(Php?) Prim karşılığı olmayan kullanıcıların uzak bir dizinde indirilebilir dosyaları korumak için nasıl

4 Cevap php

Özel ayrıcalıkları (mysql db saklanan hesapları) ile kullanıcılara, uzak direk (farklı bir sunucuda) indirmek dosyalara erişim vermek için bir ihtiyaç sitemde ve Im bir "prim" bölümünü inşa im. Sitem yüzden bir php çözüm harika olurdu PHP / MySQL kodlanmıştır.

4 Cevap

tüm kimlik denetimi yapacağım bir php dosyasına tüm indirme bağlantıları doğrudan.

Eğer dosya download.php arayabilirsiniz

, çerezler aracılığıyla parametrelerin birlikte olsun, sonrası, oturumu veya ayrıcalıklarını doğrulayın hangisi şekilde geçmektedir.

Kimlik bilgileri doğrulandıktan sonra, uygun bir başlık gönderebilirsiniz.

bu bir görüntü varsa, başlık olurdu header("Content-type: image/jpeg");

Ben de bu uzak sunucuyu sahibi olduğunuzu varsayarak yaşıyorum.

bazı yararlı bağlantılar:

MIME types

PHP Header Function

@ Pxl dediği gibi (onun da dediği gibi: header("Content-type: image/jpeg");), bir HTML başlığı olarak doğru mime türünü izni için kontrol edin ve sonra çıkış gerekir

Ayrıca o ile bir kez yapılır, çıkış için dosyanın asıl içeriğini ihtiyacınız olacak ve bu gibi (bayt) boyutu var:

header("Content-Length: ".filesize("FILENAME")*1.001);
/* The *1.001 puts a nice buffer on the filesize, I read about it online.
Browsers will stop downloading exactly at the Content-Length, but if they go
over, it's not a big deal at all. */
readfile("FILENAME");
die();

Sadece web üzerinden erişilebilir olmayan bir dizinde dosya saklamak için emin olun.

Ben de yerleşik ASP.NET, bu alışık, ama bu article kesin durumun kronik görünüyor ediyorum.

İşte ben yapardım:

  1. Dosyalarını tutan uzak sunucu B üzerinde PHP-soap-Sever Dahili.

  2. Bir kullanıcı ana sunucu A indirilen bir tetiklenir B SOAP-sunucusuna bağlanmak ve bir IP adresi ve indirmek için dosyanın id / yolu belirterek kullanıcı için bilet rezervasyonu.

  3. Sunucu B şimdi bu indirmek için bir ticketId (sadece sınırlı bir süre için geçerli olmalıdır) oluşturmak ve A. iade edecek

  4. Sunucu A GET parametresi olarak ticketId temin Sunucu B için kullanıcıyı yönlendirir

  5. Sunucu B şimdi bilet önceden kullanılmış olsaydı, kontrol süresi dolmuş veya kullanıcı yanlış IP gelirse. Bunların hiçbiri geçerli değilse dosyayı hizmet ve kullanılan bilet işaretlemek.

Not: sunucu B üzerinde dosyayı görev yaparken çalışan PHP tutmak, ancak bunun yerine X-Sendfile header kullanmayın. Aksi indir PHP maksimum yürütme süre sonra durabilir.