Perl Perl_2
Perl 「 モジュール 」 CGI 一時ファイルにアクセスする tmpFileName() (0x121)

目次 - Perl Index
Theme
Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x121 回。
CGI.pm で、アップロードされるファイルの一時ファイルにアクセス可能なメソッド「 tmpFileName() 」を確認する。
一時ファイル
「 一時ファイル 」は、英語で「 temporary file 」( テンポラリファイル ) と呼ばれます。
英語の「 temporary 」は、形容詞として「 一時の 」「 仮の 」や「 儚い 」( はかない ) の意味を持ちます。名詞として利用する場合は、「 臨時雇いの人 」を意味します。
このことから、「 一時ファイル 」は、「 一時的に利用するファイル 」または「 仮で利用するファイル 」であることが推測出来ます。
「 一時ファイルは 」時として「 ワークファイル 」( work file ) とも呼ばれることがあります。これは、一時的に「 作業用 」( work ) として利用するファイルという意味です。
また、インターネットの利用時に、Web ブラウザ等のアプリケーションが保持する「 キャッシュファイル 」( cache file ) も、その利用形態から「 一時ファイル 」と呼ばれることがあります。
英語の「 cache 」( キャッシュ ) は、「 隠す 」という他動詞で、名刺として利用する場合は「 隠したもの 」「 貯蔵所 」等を意味します。英単語「 cash 」とカタカナでは同じ発音をするので紛らわしいですが、こちらの「 キャッシュ 」は「 現金 」を意味します。
「 キャッシュファイル 」は、ユーザに気取られない様に「 データを隠し持ち 」、あたかも高速に処理しているかの様に見せかけるための技術なので、この名前が用いられていると推測出来ますが、多くの場合、これらのファイルは、一定期間を置いて削除されるため「 一時ファイル 」の名称も併用されると考えられます。
通常「 一時ファイル 」は、それを利用するアプリケーションの終了時に自動的に削除されますが、アプリケーションが正常に終了できなかった場合は手動で削除する必要があります。
なお、「 一時の 」を意味する「 temporary 」は、「 tmp 」や「 temp 」と略されることが多い様です。
Unix/Linux 系のファイルシステムに存在する「 /tmp 」ディレクトリは、主にシステムが利用する一時ファイル置場として利用されています。
メソッド「 tmpFileName() 」
CGI "一時ファイルに直接アクセスする" - perldoc.jp によれば、メソッド「 tmpFileName() 」は、CGI.pm がファイルアップロードの際に作成する一時ファイルを読み取ることが出来ると言います。
perldoc.jp の例示では、次のコードが紹介されています。
$filename = $q->param('uploaded_file');
$tmpfilename = $q->tmpFileName($filename);
これで、スカラ変数「 $tmpfilename 」には、一時ファイルのファイル名が格納されることになります。
一時ファイルのファイル名を確認する
一時ファイルのファイル名を確認します。
プログラムコードは、「 Perl 「 モジュール 」 CGI 実用的なファイルアップロード処理 プログラムコード まとめ (0x11e) 」でまとめたコードを利用します。
メソッド「 tmpFileName() 」のチェックは、プログラムコードの 115 行目から開始します。ちょうどサブルーチンの中でファイル名の入力チェックが完了する場所です。
引数として渡すファイル名は、メソッド「 upload() 」を利用して 105 行目で取得した文字列を利用します。
一時ファイルのファイル名を確認するためのプログラムコードは次のものです。
# 一時ファイル名を取得
my $tmp = $q->tmpFileName($filename);
# 一時ファイル名を出力
print $q->p("tmpFileName: $tmp");
このコードによって、Web ブラウザの画面上では次の出力が得られます。
tmpFileName: /var/tmp/CGItemp57252
これによって、一時ファイルの名前が「 /var/tmp/CGItemp57252 」であることが分かります。末尾の数字は、一時ファイルを作成する毎に別の値になります。
一時ファイルの所有者
ディレクトリ「 /var/tmp 」は、僕が利用しているレンタルサーバ「 Drive Network 」のオペレーティングシステム「 FreeBSD 」のファイルシステムに含まれるディレクトリです。
ファイル「 CGItemp57252 」は、(0x10b) や (0x10c) で確認した通り、Web サーバの実行ユーザが作成するため、( Drive Network では ) ユーザ「 www 」が所有となっています。
一時ファイルの削除
一時ファイルは、そのファイル名を任意に変更されない限り、通常はプログラムの終了時に自動的に削除されると言いますが、一部の OS ( Windows NT 等 ) の場合は、一時ファイルのファイルハンドルを明示的に閉じない限り削除に失敗するとのことです。
0x121 -> 0x122 へ
次回は、メソッド tmpFileName() で取得したファイル名を利用して、一時ファイルにイタズラをしてみます。
参考情報は書籍「 初めての Perl 第 6 版 」を中心に perldoc, Wikipedia および各 Web サイト。それと詳しい先輩。
目次 - Perl Index
Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)