- ベストアンサー
pdfファイルをメンバーのみに閲覧するには!!
- インターネット上のメンバーサイトで、pdfファイルをメンバーのみに閲覧する方法について相談です。
- ベーシック認証を使用せずに、ログインシステムを利用してpdfファイルをメンバーのみに限定する方法についてアドバイスをお願いします。
- pdfファイルをメンバーのみに閲覧するための効率的な方法について教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
pdfファイルをウェブからアクセスできない場所に置いて、PHPでそれを読んでContent-Type: application/pdf で出力すればいいと思います。 http://example.com/pdf.php/readme.pdf とかのURLにして、pdf.phpからはPATHINFOを見てreadme.pdfという名前を得てそれを使ってpdf保管用ディレクトリからファイルを読み出す。
その他の回答 (4)
- pnck
- ベストアンサー率90% (9/10)
#4回答ミスです。訂正します。スレ汚しすみません。 > よって、download.php?file=hoge.phpのように、 ↓ よって、download.php?file=hoge.pdfのように、 phpじゃなくてpdfですね。わかるとは思いますが念のため。
- pnck
- ベストアンサー率90% (9/10)
#2です。 少し勘違いされてるようなのでいくつか補足とツッコミを・・・ #1さんのウェブからアクセスできない場所にPDFを置くと、 #2のアクセスできるところに置くがhtaccessで制御するという方法。 #1と#2の違いはこの点のみです。 ログインシステムを採用している場合、 普通はPHPを介してメンバーコンテンツにアクセスするので、 私はPDFに直接アクセスされたくないのだと思い回答しました。 #1さんもそう考えての回答だと思います。 > メンバーにはURLによりpdfファイルにアクセス可能としたいということです。 > <FilesMatch>タグによる方法ですと、 > メンバーもURLによりpdfファイルにアクセスできなくなるのではないかと思います。 確かにそうですが、PDFにはログイン済みかどうかを判別する機能はありません。 #1さんのウェブからアクセスできない場所に置くだと、 そもそもURLからアクセスすることができません。 よって、download.php?file=hoge.phpのように、 ログイン済みメンバーかどうかを確かめられるスクリプトを挟む必要があります。 そしてメンバーにはPDFに直接ではなく、 このdownload.phpを介したアクセスをしてもらいます。。 ログインシステムを採用してるということは、そういうことをしてるはずです。 PDFの出力方法は#1さんのを参考にして下さい。
補足
pnckさん、 補足情報ありがとうございます。 当方の質問の仕方が適切でなかったかも知れませんが、ログインシステムを採用するシステムにおいて、サイトに設置するPDFファイルを、メンバー外の人には閲覧可能とせず、メンバーへのみ閲覧可能とする方法が、わからなかったために質問させていただきました。pnckさん、およびnotnotさんの情報により、その方法を理解いたしました。 PDFファイルをウェブからアクセスできない場所に置き、phpページにて、ログイン済みメンバーが否か、確かめたうえで、本PDFファイルを読み込み表示させるphpプログラムを介し、PDFファイルをメンバーに閲覧させるということですね。 本当に基本的なところを知らなかったため、戸惑っていたのですが、お蔭様でわかるようになりました。有難うございました。
- notnot
- ベストアンサー率47% (4900/10358)
No1です。 http://example.com/pdf.php/readme.pdf というURLにアクセスすると、pdf.php が起動されてそのプログラムから$_SERVER["PATH_INFO"]を参照すると、"/readme.pdf" が入ってます。 従って骨組みだけ書くと、 <?php 認証処理; $dir = "/PDFの置き場"; $file = $_SERVER["PATH_INFO"] $fileの文字列が正しいことのチェック(先頭以外に/があるとかは駄目); $dir.$fileのファイル存在チェック; header("Content-Type: application/pdf"); echo file_get_contents($dir . $file); まずはテストとして、これで動くかですね。 <?php $dir = "/PDFの置き場"; $file = $_SERVER["PATH_INFO"] header("Content-Type: application/pdf"); echo file_get_contents($dir . $file);
補足
notnotさん、 わざわざ、コードまでお書きいただきお手数おかけいたしました。 お蔭様で、メンバーのみにPDFファイルを閲覧可能とすることができるようになりました。 notnotさんのコードを参照させていただき、実際には、次のようにさせていただきました。 (1) webからアクセスできない場所においたPDFファイルを読み出すphpプログラム <?php header('Content-type:application/pdf'); edho file_get_contents('PDFファイルへの絶対パス'); ?> *上記PDFファイルへの絶対パス情報はレンタルサーバー会社にききました。 (2)他ページにて、テキスト(例えば、「PDFファイルへ」などのテキスト)に上記(1)のページへリンクを張っておく。メンバーは本テキストをクリックすることにより、上記(1)のphpページを起動、そのphpプログラムを介して、PDFファイルを閲覧する。 基礎的なことであっても、自分ひとりでは到底解決できなかったのですが、皆様のお力を借りまして解決することができました。本当にありがとうございました。
- pnck
- ベストアンサー率90% (9/10)
htaccessが使えるなら、PDFのあるディレクトリに、 <FilesMatch "\.pdf$"> Order allow,deny Deny from all </FilesMatch> という内容を記述した、.htaccessファイルを作成して下さい。 直接アクセスしたときに403を返すようになります。
補足
pnckさん、 早速のご回答ありがとうございます。 一点、私の方で記述が不正確であったからかも知れませんが、メンバー以外にはURLによりアクセスをさせませんが、メンバーにはURLによりpdfファイルにアクセス可能としたいということです。<FilesMatch>タグによる方法ですと、メンバーもURLによりpdfファイルにアクセスできなくなるのではないかと思います。 メンバーのみにpdfファイルをアクセスさせるには、先にnotnotさんのご回答がありましたように、pdfファイルをWEBからアクセスできない場所において、phpで本ファイルを読みContent-Type:application/pdfで出力することだと思います。 よろしくお願いいたします。
補足
notnotさん、早速のご回答有難うございます。 pdfファイルをWebからアクセスできない場所において、phpでそれを読んで(phpのreadfile()関数利用)、Content-Type:application/pdfで出力する(phpのheader()関数利用)のですね。 こうしたやり方の知識がなかったものですから、本当に助かりました。なお、notnotさんご回答の「http://example.com/pdf.php/readme.pdfとかのURLにして、pdf.phpからはPATHINFOを見てreadme.pdfという名前を得てそれを使ってpdf保管用ディレクトリからファイルを読み出す。」という部分ですが、少しわかりませんので、追加で質問させてください。pdf.phpがreadme.pdfファイルを読み出すphpファイル、readme.pdfが対象とするpdfファイルと理解しています。 (1)http://example.com/pdf.php/readme.pdfは何でしょうか?readme.pdfをおいたディレクトリの絶対パス(フルパス)でしょうか? pdf.phpファイルにpathinfo('http://example.com/pdf.php/readme.pdf')を記述し、readme.pdfの名前を得てそれを使ってpdf保管用ディレクトリからファイルを読み出すということでしょうか? 勉強不足であり、お手数かけますが、追加アドバイスをいただければ有難く存じます。