-1

現在、このコードを使用してダウンロード リンクを非表示にしていますが、一部のユーザーにはダウンロードが完了していません。理由はわかりませんが、あまりにも多くのユーザーからこの問題が報告されています。私の現在のコードは次のとおりです。

file = "../".$realFileName;
$fakeFileName= 'Upbaz.ir-'.base64_decode($_GET['ffname']);
$fp = fopen($file, 'rb');
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=$fakeFileName");
header("Content-Length: " . filesize($file));
fpassthru($fp);

ダウンロードリンクを非表示にする他の方法を知っている人はいますか?

4

2 に答える 2

1

スクリプトの実行時間を増やす

@set_time_limit(120); 
于 2013-02-21T16:53:12.293 に答える
1

このスクリプトはファイルのダウンロードを処理し、必要に応じてバッファー/さまざまな ext タイプが含まれます。リンクを非表示にする良い方法は、ファイルを保護されたディレクトリに置き、リンクをデータベースに保存することです。ユーザーはファイルに関連付けられた ID またはセッションを確認し、サーバーはファイルを見つけて提供します。

if ($fd = fopen ($fullPath, "r")) {
    $fsize = filesize($fullPath);
    $path_parts = pathinfo($fullPath);
    $ext = strtolower($path_parts["extension"]);
    switch ($ext) {
        case "txt":
            header("Content-type: application/txt"); // 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: attachment; 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);

ディレクトリを保護するための.htaccess(これらのファイルのみのディレクトリが必要です

deny from all

あなたのものに変更された上記のスクリプト:

$file = "../".$realFileName;
$fakeFileName= 'Upbaz.ir-'.base64_decode($_GET['ffname']);
if ($fd = fopen ($file, "r")) {
        $fsize = filesize($file);

        header("Content-type: application/octet-stream");
        header("Content-Disposition: attachment; filename=\"$fakename\"");

        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);
于 2013-02-21T16:55:09.800 に答える