
No.2ベストアンサー
- 回答日時:
ああ、なるほど。
使ったことないですけど、コマンドラインでパスワードを設定できるqpdfとかを使って、パスワード付きのpdfを一時ファイルとして作って、それを前で書いてあるようにバイナリ出力すればいいかもです。No.1
- 回答日時:
適当。
表示がずれるので空白2文字の全角空白にしていることに注意。#!/usr/bin/perl -T
use strict;
use warnings;
use utf8;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use CGI::Pretty;
use Encode;
use constant DOWNLOAD_DIR => '/tmp';
use constant BUFFER_SIZE => '100_000';
# file /tmp/aaa.txt requires password AAA
# file /tmp/bbb.txt requires password BBB
my %pass_of = ( 'aaa.txt' => 'AAA', 'bbb.txt' => 'BBB' );
my $q = CGI->new();
my $file = decode( "utf8", $q->param('file') );
my $pass = decode( "utf8", $q->param('pass') );
if ( defined $file ) {
if ( !exists $pass_of{$file} ) {
print_download_page( $q, 'No such file' );
}
elsif ( $pass_of{$file} eq $pass ) {
download_file( $q, $file );
}
else {
print_download_page( $q, 'Password mismatch' );
}
}
else {
print_download_page($q);
}
sub download_file {
my $q = shift;
my $file = shift || '';
my $file_with_full_path = DOWNLOAD_DIR . '/' . $file;
if ( -r $file_with_full_path ) {
print $q->header(
-type => 'application/octet-stream',
-attachment => encode( "utf8", $file )
);
open( my $fh, '<', encode( "utf8", $file_with_full_path ) )
or croak "$file: $!";
binmode $fh;
my $buffer = '';
while ( read $fh, $buffer, BUFFER_SIZE ) {
print $buffer;
}
close $fh or croak "$file: $!";
}
else {
print_download_page( $q, "$file not found or readable" );
}
}
sub print_download_page {
my $q = shift;
my $message = shift;
my $html = << "END_HTML";
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
<title> download test </title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form method="POST" action="" enctype="multipart/form-data">
<input type="radio" name="file" value="aaa.txt" />Download aaa.txt
<br />
<input type="radio" name="file" value="bbb.txt" />Download bbb.txt
<br />
Password :
<input type="password" name="pass" size="50" maxlength="80" /><br />
<input type="submit" name="Download" value="Download" />
</form>
<hr />
<p>$message</p>
</body>
</html>
END_HTML
print $q->header( -charset => 'UTF-8' ), $html;
}
さっそくのご回答ありがとうございます。
スクリプトを確認しました。
このコードはダウンロードする際にパスワードを入力させてダウンロードを可能にするという
ものですよね?
言葉足らずだったかもしれません。
ダウンロードする際のパスワードではなく、ダウンロード後PDFを開く際にに求められる
パスワードです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PDF PDF ファイルのパスワードの外し方 6 2023/03/29 11:37
- その他(セキュリティ) PDFファイルのパスワード設定について 1 2022/06/25 10:10
- その他(IT・Webサービス) WEBサイト内のファイルを探す方法は? 1 2022/11/11 16:38
- PDF パワポをPDFにしてパスワードをかける方法 5 2022/04/15 16:14
- PDF アクロバットリーダーはインストールしてます。 IPHONE、メールに添付されているパスワードが設定さ 2 2023/04/10 13:13
- PDF Googleドキュメントのpdf文書にパスワードを設定したい 1 2023/08/04 20:55
- サーバー WIN10のファイル又はフォルダを社内LAN上HDDで共有する場合、特定の人だけが見えるようにしたい 3 2023/04/18 00:32
- PDF 突然PDFファイルが印刷できなくなった 1 2022/12/22 15:47
- その他(セキュリティ) ZIPというファイルでパスワード付きPDFファイルが送られてきたのですが、 パスワードを入力▶︎ファ 3 2022/07/26 19:44
- その他(セキュリティ) 一度、閲覧しただけで、数ヶ月も同じ広告が表示されるのは違法じゃないの? 2 2022/09/27 10:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
掲示板(kentさんの所のsunbbs...
-
Perlでメール送信機能
-
ダブルクオテーションは使うべ...
-
ezwebにおける POSTメソッドで...
-
PC・携帯等のアクセス時の自動...
-
テキストファイルを読んで次のc...
-
CGIがうまく作動せず困っていま...
-
substrで数値を抽出してのマッ...
-
CGIでCSVとしてデータ保存→検索...
-
CGIから表生成(1行に数件のデ...
-
希望した番号に更新マークを表...
-
SUN BBSの改造方法
-
wordの数式について 定積分を書...
-
サイトの階層について
-
データ削除方法について
-
perlで索引スタイルありますか。
-
二つのプルダウンメニューから...
-
ネットで買い物をしていてわか...
-
パスワード認証
-
Googleサイト内検索窓設置について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
掲示板(kentさんの所のsunbbs...
-
htmlからパラメータで、cgiに渡...
-
CGI内でけいたいスマホの振り分け
-
4年に1回+6,62以上は1の位を...
-
CGIプログラム内でのHTML表記
-
ログファイルの編集についてお...
-
ひとつのCGIファイルに複数のペ...
-
(CGI)お気に入り登録やアドレス...
-
CGI によるファイルのアップロード
-
TOK2で基礎的なCGIをUPしたが動...
-
【perl/cgi】文字列を検索して...
-
変わるアドレスにリンクする方法
-
サーバー上のPDFにCGIでパスワ...
-
クオートの多重入れ子をするには?
-
CGIでテキストボックスの内容に...
-
sendmail 送信先を複数設定す...
-
cgiについて教えて下さい。
-
掲示板 imgboard のcgi改造方法
-
CGI経由でのPDFファイルをダウ...
-
cgi(perl) sendmailの使い方
おすすめ情報