Web sitelerinizden paylaştığınız dosyalarınıza dışarıdan indirme linki verilmesin engelleyebilmek için dosya indirme sisteminizde yapacağınız ufak bir değişiklik yeterli olacaktır.
Bilindiği üzere web siteleriniz üzerinden paylaştığımız dosyalarınıza başka siteler üzerinden rahatlıkla indirme linki tanımlanabilmektedir. Bu şekilde yapılan indirmeler web sitenizin kullandığı band genişliğini de tüketmektedir. Üstelik bu dosya çok paylaşılan bir dosya ise o zaman faturanız oldukça kabarık gelecektir.
Bunu engellemenin basit bir yolu olarak kullanmanız gereken kod ve yöntemi aşağıda veriyorum.
Kod:
$id=intval($_GET[id]);
$dbname="dosyalar.txt";
$indirilecekdosya=file($dbname);
$indirilecekdosyalink= "$indirilecekdosya[1]";
header("Content-disposition: attachment; filename=".$indirilecekdosyalink."");
header('Content-type: application/octet-stream');
readfile($indirilecekdosyalink);Bu şekilde dosyaya ait yolu kimse görmeyecek. Çünkü post yöntemi ile ve bir id vasıtasıyla txt dosyamızda saklı olan ve 2. satırda dosya yolu bulunan dosya indir.php tarafından dosya adresinden okunmakta ve kullanıcının indirmesine olanak sağlanmaktadır.
Link ise aşadığıki şekilde olacaktır.
indir.php?islem=indir&id=25
Bu linke tıklandığı zaman $_GET yöntemi ile tarayıcıdan alacağımız id değeri veritabanı ile karşılaştırılıp bu id numarasına ait dosya tarayıcı tarafından indirilecektir.
Kod ile ilgili söylenmesi gereken 2 önemli konu.
1) Bu kod da dışarıdan link verilmesini engelleyen koruma yok. Referrer bilgisi kontrol edilerek, ya da daha sağlamı her istek için session kontrol edilerek download başlatılmalı.
2) Bu kod php execution time süresi ile sınırlıdır, shared hostinglerde 30 saniyedir. Download süresi maksimum işlem süresini aşacak büyüklükteki dosyalarda download bitmeden yarıda kesilir.