![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
お世話になります。
技術的な質問といいますか、疑問なのですが、ぜひ皆様のご意見を伺わせてください。
現在、phpを用いてzipのダウンロードページを作成しております。
本サイトは簡単な会員制のため、必要事項を入力してもらった上でダウンロードができる仕組みです。
まず、ファイル構成は、
1、top.html
2、check.php
3、download.php
となっております。
topにはformで、入力した内容をcheck.phpに渡す処理が書かれております。
check.phpには、入力された内容を確認し、場合によってはhtml画面に戻ったりします。
download.phpは、aタグでダウンロードリンクが書かれており、クリックをすると保存ダイアログが開きます。
この一連の流れはすでに完成しているのですが、問題となっているのが直接download.phpのリンクを知っている人がいたとして、urlに直書きしてしまうとアクセスできてしまうということです。
なので、.htaccessを使って制限する方法か、またはdownload.phpで渡ってきた$_POSTの中身が空白ならばエラー処理 というような流れを作ったほうがいいのでしょうか。
※ちなみに$_POSTで渡ってくるものは全て何かしら入力されており空白は許していません。
.htaccessも正直、どのように書いたらいいのかよくわかりません・・・
もし、他にいい方法がありましたらぜひ教えてください。
よろしくお願い致します。
No.1ベストアンサー
- 回答日時:
download.phpを下記のようにすれば良いと思います。
1.ダウンロードさせる対象のファイルを公開以外のローカルフォルダーに格納
→これにより直ダウンロードはできません。
2.このプログラムの中から、ダウンロードさせる対象のファイルを読み込み標準出力にはき出す。
※下記にPDFをダウンロード(inlineで)させる例です。
//$filename には、ローカルファイルフルパス名が入っている(PDF)
if( !file_exists($filename) ) {
return false;
}
$filesize = filesize($filename);
header("Content-Disposition: inline; filename=".basename($filename));
header("Content-Length: " . $filesize);
header("Content-Type: application/pdf");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0,pre-check=0");
header("Pragma: private");
$handle = fopen($filename, "rb");
while (!feof($handle)) {
echo fread($handle, 4096); // TimeOutさせない為
flush(); // TimeOutさせない為
}
fclose($handle);
return true;
}
なるほど~
こういう技もあるのですね、勉強になります!
すみません、まだサイトへの実装作業に取り掛かれていないので、後日実装してみます~
ありがとうございました!
No.2
- 回答日時:
会員制なんですよね?
それなら、ログイン処理を入れてログインしていなければダウンロードできないようにしていればいいと思います。
ログインしたページに、ダウンロードできるファイルの一覧って形で表を用意しておいて、クリックするとdownload.phpに。
ログイン無しでdownload.phpを直接入力しても、ログインされていませんと表示すればOKだと思いますが。
$_SESSIONあたりを使って、ログイン情報を引き回せますよ。
この回答への補足
すみません、会員制というのが少しオーバーな表現でした。
会員といいますか、フォームに氏名やメールアドレスを入力して頂く→結果的に会員になる という流れなので、会員と申し上げましたが、実際はログイン画面を別途用意しているわけではないのです。
説明が足らず申し訳ありません。
しかし、$_SESSIONは、何か別の方法で使えそうな気がします!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP php 入力画面から確認表示画面へ情報の受け渡しについて。 1 2023/06/07 18:00
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- PHP $_SESSIONに渡した後はそのまま使っても問題ありませんか? 3 2022/11/08 22:17
- PHP Laravelだと、簡易なログイン機能であればコマンド1発でサクッ 1 2022/05/21 23:09
- PHP 文字列を段落で分ける方法を教えて下さい。 2 2023/03/09 10:03
- PHP PHPで入力フォームでデータを確認表示画面まで送る流れを日本語で理解したいのです。 1 2023/05/29 19:12
- MySQL 「掲示板のログイン画面」はPHP~MySQLに「データベース認証のシステム」方式です。 1 2022/09/27 05:00
- PHP PHPの変わった閉じタグの必要性と意味を教えてください。 1 2022/08/28 15:15
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- サーバー Laravelをレンタルサーバーにインストールするにはどうすればいいですか? 2 2022/06/29 10:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPで複数ファイルのダウン...
-
CSVファイルをダウンロードで文...
-
phpでzipファイルダウンロード...
-
phpでうまく画像がダウンロード...
-
csvダウンロードについて
-
CFileDialogの最初のディレクト...
-
VB6にてメールを送信する方法
-
onedrive にexcelファイルをア...
-
phpのheader("Location:#pos")...
-
バイナリファイルをブラウザに...
-
OpenGLで描いて画像ファイル出力
-
フォントの色を変えるには?
-
VB.NET 最下位のディレクトリ名...
-
リンク先を隠す方法はないでし...
-
PHPのif文でその処理を途中で抜...
-
FORMタグを使わずに、POSTする...
-
youtubeに音声のみのmp4ファイ...
-
mysql複数レコードをまとめて削...
-
受け取ったパラメータを次のphp...
-
phpの階層が変わると上手く読み...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
zip圧縮の種類について
-
PHPで複数ファイルのダウン...
-
phpでzipファイルダウンロード...
-
eclipseでコメントアウトができ...
-
PHPでCSVファイルの任意の行だ...
-
PHP 検索結果のCSVダウンロード
-
PDF ダウンロード
-
PHPでファイルのダウンロードす...
-
ファイル一覧を表示しその画面...
-
libxml2のインストール
-
PHPでファイルをダウンロードさ...
-
CSV出力時の”0”表示(電話番号...
-
ブラウザでExcelをダウンロード...
-
【PHP】ダウンロードサイト作成...
-
wgetの使い方
-
PHPでGoogle TTSからMP3ダウン...
-
PHPで複数ファイルをZIPで圧縮...
-
DelphiのURLDownloadToFile関数...
-
VB.NETのFTPダウンロードについて
-
ExcelとPHPについて・・・
おすすめ情報