最も簡単な方法は、(発電スクリプトがないように)だけで有効なセッションの存在を必要とするPHPスクリプトを持っているおそらく、その機能があるreadfile("/path/to/contract.pdf");
にそのように、あなたはあなたのPDFのラッパースクリプトを持つことができますダウンロードされている契約がディレクトリ内の契約であるだけでなく、sesion内の人物の正しい契約であることを確認します。
ディレクトリに対する.htaccessベースのソリューションの問題は、ディレクトリへの読み取りアクセスを持つすべてのユーザーが任意の契約をダウンロードできることです。あなたはできるhttp://example.com/contract.php?user=132&bill=1
のようなURLが与えられ
:真ん中に
<?php
$user = $_GET['user'];
$bill = $_GET['bill'];
# do input validation on $user and $bill. No really, do it.
if ($user != $_SESSION['user']) {
die("Security error; the black choppers are on their way.");
}
header("Content-type: application/pdf");
header('Content-Disposition: attachment; filename="Contract-$user-$bill.pdf"');
readfile("/path/to/pdfspool/$user/Contract-$user-$bill.pdf");
if()
チャンクが要求されている$のユーザーは、現在のユーザーのために有効であることを確認します。明らかに、$ _SESSION ['user']を保存することをお勧めします。おそらく、このユーザーが初めてログインするときです。
もちろん、スプールファイルを保存する必要はありません。 PDFを生成するプロセスがあなたのWebサーバーを圧倒することがないならば(もしそれが他の問題を抱えていれば)、要望に応じて各PDFを最初から再生成するほうが簡単かもしれません。これは今私が会社の請求書で行うことであり、各請求書には、生成されたときと、どのIPアドレスからの要求によって、6ポイントのフッターが表示されます。 :)
ユーザがアドレスバーのPDFスクリプトの直接URLを入力するのに十分な場合はどうすればよいですか?たとえば、www.mysite.com/contracts/124/5.pdfと入力します。 –
が更新されました。 $ userをセッション変数に対して検証するコードにセクションを追加しました。 – ghoti