Korumalı Dosya İndirme Script.

3 Cevap

Kullanıcıların paypal, clickbank ve paydotcom yoluyla satın alacak bir dosya var. Benim sunucuda dosya indirme sayfasını barındırması gerekir.

Benim public_html klasörünün dışında bir dizine dosyanın koydum. Klasör örneğin public_html denilen ve "yükleme" olarak aynı seviyede.

Aşağıdaki komut dosyası yapmak gerekiyordu, ama ben onunla iki sorun var olduğu ...

1) Çok güvenli görünmüyor. sadece sorgu dizesi bir ödeme onay belirteci kontrol?

2) Ben yolda benim site.com ortak klasörüne dahil olmadan indirme klasörüne işaret $ yol değişkeni olamaz. Ben $ yolunu echo Örneğin, ben olsun

/home/myuser/public_html/mysite.com

Ama çözmek gerekiyor

/home/myuser/download/myprotectedfile.zip

Bunu yapmak için daha güvenli ya da akıllı bir yolu vardır eminim, o yüzden soruyorum ...

<?php

// place this code inside a php file and call it f.e. "download.php"
$path = $_SERVER['DOCUMENT_ROOT']."/path2file/"; // change the path to fit your websites document structure
$fullPath = $path.$_GET['download_file'];

if ($fd = fopen ($fullPath, "r")) {
    $fsize = filesize($fullPath);
    $path_parts = pathinfo($fullPath);
    $ext = strtolower($path_parts["extension"]);
    switch ($ext) {
        case "pdf":
        header("Content-type: application/pdf"); // add here more headers for diff. extensions
        header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\""); // use 'attachment' to force a download
        break;
        default;
        header("Content-type: application/octet-stream");
        header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
    }
    header("Content-length: $fsize");
    header("Cache-control: private"); //use this to open files directly
    while(!feof($fd)) {
        $buffer = fread($fd, 2048);
        echo $buffer;
    }
}
fclose ($fd);
exit;
// example: place this kind of link into the document where the file download is offered:
// <a href="download.php?download_file=some_file.pdf">Download here</a>
?>

Ben iş için bu almak yaşıyorum sorun benim site.com başvuru içerir $ yolunun değerdir, ancak indirme dizini site.com dışında. Ben dosya indirme tutan dizine işaret etmek için bir seviye bir başvuru kalkmak gerekir.

Ben daha önce de belirtildiği gibi, Ayrıca, ben bunu nasıl emin değilim bu (güvenli olan bir şekilde beklenen bir sorgu dizesi değeri denetimi dışında)

Şimdiden teşekkürler!

3 Cevap

Sadece normal bir dizin yolu değil, bir web biri gibi yolunu dikkate almak gerekir. yani bir seviye yukarı gitmek için sadece ".. /" mesela

Eğer yapı böyle ise

/path2file/inhere.pdf /public_html/download.php

Dosyanın yolunu sadece download.php "../path2file/inhere.pdf" den olurdu

public_html doc kök ise iyi o zaman olurdu indirmek için yol almak gerekir

realpath($_SERVER[DOCUMENT_ROOT].'/../download');