電子書籍の厳選無料作品が豊富!

pdfファイルをメンバーのみに閲覧するには!!
インターネットにおいて、phpによるログインシステムを利用したメンバー用サイトを制作中です。
本サイトにおいて、メンバーのみに、pdfファイルを閲覧できるようにしたいと考えておりますが、pdfファイルへのURLにより、メンバー外の方も閲覧可能となってしまいます。
メンバーのみへ閲覧可能とし、メンバー外の方には、閲覧できないようにする方法はありますでしょうか?
pdfファイルの存在するディレクトリへベーシック認証を設定すれば可能と思いますが、ログインシステムを利用して一回サイトに入ってきていますので、ベーシック認証による再度のユーザID、パスワード入力は、手数を増やしますので、できるだけこの方法は避けたいと考えています。アドバイスをいただけますよう、よろしくお願いいたします。

A 回答 (5件)

pdfファイルをウェブからアクセスできない場所に置いて、PHPでそれを読んでContent-Type: application/pdf で出力すればいいと思います。


http://example.com/pdf.php/readme.pdf
とかのURLにして、pdf.phpからはPATHINFOを見てreadme.pdfという名前を得てそれを使って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保管用ディレクトリからファイルを読み出すということでしょうか?
勉強不足であり、お手数かけますが、追加アドバイスをいただければ有難く存じます。

補足日時:2010/09/14 10:04
    • good
    • 0

#4回答ミスです。

訂正します。スレ汚しすみません。

> よって、download.php?file=hoge.phpのように、

よって、download.php?file=hoge.pdfのように、

phpじゃなくてpdfですね。わかるとは思いますが念のため。
    • good
    • 0

#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ファイルをメンバーに閲覧させるということですね。
本当に基本的なところを知らなかったため、戸惑っていたのですが、お蔭様でわかるようになりました。有難うございました。

補足日時:2010/09/15 21:13
    • good
    • 0

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ファイルを閲覧する。

基礎的なことであっても、自分ひとりでは到底解決できなかったのですが、皆様のお力を借りまして解決することができました。本当にありがとうございました。

補足日時:2010/09/15 21:46
    • good
    • 0

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で出力することだと思います。
よろしくお願いいたします。

補足日時:2010/09/14 09:22
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!