5

仮想ポイントのファイルを購入してダウンロードできる Web サイトを作成しています。ユーザーが購入せずにファイルをダウンロードできるようにしたくないので、非表示にする必要があります。ホスト以外の誰にも許可なくすべてのファイルをフォルダーに入れました。問題は、誰かがファイルを購入してダウンロードしたい場合です。

ユーザーのアクセス許可を確認してからファイルの内容を出力するファイルゲッターを作成することにしました。これまでの私のコード:

<?php
    require_once('content/requirements.php'); //mysql connections
    secure(1); //disconnect unlogged users

    if (!isset($_GET['id'])) //if no file id provided
        die();

    $fid=mysql_real_escape_string($_GET['id']); //file id

    $query="SELECT * FROM files WHERE user_id = "$_SESSION['user_id']." AND file_id = ".$id;

    $q=mysql_query($query);

    if (mysql_num_rows($q)!=1) //if no permission for file or multipe files returned
        die();

    $file=mysql_fetch_array($q); //file id
    $sub=mysql_fetch_array(mysql_query("SELECT * FROM sub WHERE id = ".$file['file_id'])); //payment id
?>

ユーザーがこれを行う権限を持っていることを確認したら、phpScript はファイルの内容を書き込み、適切なヘッダーを送信して、ユーザーがダウンロードできるようにする必要があります。

ファイルをバイトごとに読み取って印刷する方法と、ファイルをダウンロード可能にするために header() に何を書き込む必要があるか (したがって、その内容をコピーペーストする必要はありません)。

これは最善の方法ではないかもしれませんが、私が最近考えた最良の方法でした。

助けてくれてありがとう。

4

2 に答える 2

9

readfile php docから

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
于 2012-11-19T12:51:25.560 に答える
5

Google には多くのスクリプトが用意されています。以下にいくつかのリンクを示します。

http://www.tutorialchip.com/php-download-file-script

http://www.webinfopedia.com/php-file-download-script.html

于 2012-11-19T12:51:18.417 に答える