2

サーバーにいくつかのPDFファイルを保存していて、有料の人だけが特定のPDFをダウンロードできるようにしたいとします。

たとえば、私がたくさんの電子書籍を持っているとしましょう。ユーザーが電子書籍Aをダウンロードできる唯一の方法は、自分のアカウントにその特定の書籍の適切な資格情報が含まれている場合です。

これを達成するための最良の方法は何ですか?

私のアイデアを改善する方法についてのアイデア/アドバイスは大歓迎です!

私の現在の考え:

  • ユーザーが注文する

  • 成功すると、/ account_num /order_id/によって新しいフォルダが作成されます。特定のファイルのコピーがこのディレクトリに保存されます。

  • ランダムハッシュが埋め込まれたURLからのアクセスのみを許可する.htaccessをphpに生成させます。
  • ユーザーがこのランダムハッシュページにアクセスできる唯一の方法は、適切なユーザーとしてサインインし、ハッシュがデータベースに保存されているハッシュと一致する場合です。それ以外の場合は、ホームページにリダイレクトされます。
4

3 に答える 3

4

PDFをドキュメントルートの下に保存します。誰かがたとえばA.pdfをダウンロードしたい場合は、次のようなPHPページに誘導しますdownload.php?file=A.pdf。そのdownload.phpページを作成して、要求しているユーザーの特権を確認し、特権が十分にある場合はA.pdfのダウンロードを強制します。

于 2010-05-18T15:25:07.880 に答える
4

1)PDFをドキュメントルートの外側に配置して、ブラウザから直接アクセスできないようにします。

2)PHPページにPDFファイルを提供させるので、それらにアクセスする唯一の方法は、正常にログインして検証することであり、これはダウンロードのたびに適用されます。

PHPを介してファイルをダウンロードするためのコード(入力をスクラブしてください):

<?php
    $file_name = $_GET['filename']; // somefile.pdf
    $file = '/home/pathtofile/' . $file_name;

    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=' . $file_name);
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
?>
于 2010-05-18T15:26:13.450 に答える
1

PDFをドキュメントルートの外に保存します(ホスティング設定が不十分なために不可能な場合は、推測しにくい場所に保存します)。

ユーザーに権限があることを確認してから、次のようにします。

<?PHP
$pdf_path = '/some/dir/';
header('Content-type: application/pdf');
readfile($pdf_path . 'mydoc.pdf');

ヘッダーをさらに調整する必要があるかもしれませんが、それが基本的な考え方です。

于 2010-05-18T15:28:13.170 に答える