自作ファイルアップローダのHTML出力部 †実際に作成したソースコードを公開します。 #!/usr/bin/perl use warnings; # 警告表示 # use strict; # 構文チェック # # # require './jcode.pl'; # for Shift-Jis # # # # Read Cookie *************************************************## Cookieの内容を読込む # my $cv = ""; # クッキーのデータ行を格納する # my $cname = ""; # クッキーに保存された名前 # my $curl = ""; # クッキーに保存されたURL # my $cmssid = ""; # クッキーに保存されたID # my $nouse = ""; # ゴミデータの処理 # # # $cv = $ENV{'HTTP_COOKIE'}; # (あなたの)環境変数, クッキーの内容を変数に読込む # # # ($cname, $curl, $cmssid, $nouse) = split( /#@#/, $cv ); # クッキーの内容を各変数に格納 # # # unless( defined $cmssid || $cmssid ne "" ) # 入力IDが未定義または空白かどうか # { # 入力IDが未定義または空白の場合 # $cmssid = 1; # デフォルトで"1" # } # # #/Read Cookie *************************************************## # # Read Log ****************************************************## ログファイルを読込む # my @reada = (""); # ログファイルの内容を格納する # # # open( LOGR, "<./filelog.txt" ) # ログファイルをオープン # or print "Location: http://bj006.com/cgi/error2.htm"."\n\n"; # 失敗時はエラーページ2(内部エラー)へジャンプ # flock( LOGR, 1 ) # 共有ロック # or print "Location: http://bj006.com/cgi/error2.htm"."\n\n"; # 失敗時はエラーページ2(内部エラー)へジャンプ # @reada = <LOGR>; # ログファイルの内容を行ごとに配列に格納 # close LOGR; # ファイルクローズ # #/Read Log ****************************************************## # # HTML Front **************************************************## HTML前半部出力 # print 'Content-type: text/html'."\n\n"; # HTML出力 # # # print <<HF; # HTML出力 複数行 # <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>uploader</title> </head> <body bgcolor="#B8A470" link="#0099FF" vlink="#999999" alink="#FFFF99"> <p align="left"> <font size="+7" face="Times New Roman, Times, serif"> <strong>bj006.com File Uploader</strong> </font> <font size="3"><br></font> </p> <form action="./write.cgi" method="POST" enctype="multipart/form-data"> <!-- 入力フォーム(POST)の開始 write.cgiへ--> <div align="left"> <table width="21%" border=" " bordercolor="#B8A470"> <tr> <td width="20%">Name:</td> <!-- 入力フォーム: 名前 --> <td colspan="2"> <input name="name" type="text" size="25" maxlength="20" value="$cname"> <!-- cookieから なければ空白 --> </td> </tr> <tr> <td>Comment:</td> <!-- 入力フォーム: コメント --> <td colspan="2"><input name="comment" type="text" maxlength="20" size="25"></td> </tr> <tr> <td>File:</td> <!-- 入力フォーム: ファイル --> <td colspan="2"><input name="file" type="file" size="25"></td> </tr> <tr> <td height="2">Password: </td> <!-- 入力フォーム: 投稿パスワード --> <td width="9%" height="2"> <input name="pwd" type="password" size="8" maxlength="8" value=""> </td> </tr> <tr> <td height="2">URL:</td> <!-- 入力フォーム: URL --> <td height="2" colspan="2"> <input name="url" type="text" value="$curl" size="25"> <!-- cookieに保存されたURL なければ空白 --> </td> </tr> <tr> <td height="2">ID: </td> <!-- 入力フォーム: ID --> <td width="9%" height="2"> <input name="mssid" type="text" size="4" maxlength="4" value="$cmssid"> <!-- cookieのID or 空白 --> </td> <td width="71%" height="2">(input 1-1024) </td> </tr> <tr> <td height="7"></td> <td height="7" colspan="2"> <input type="submit" name="Upload" value="upload"> <!-- 入力フォーム: 投稿ボタン --> </td> </tr> </table> </div> </form> <!-- 入力フォーム ここまで --> <p align="left"> <!-- リンク --> <a href="http://bj006.com"> <font size="2"> <span style="background-color: #000000">-HOME-</span> </a> <a href="http://bj006.com/cgi/aboutuploader"> <span style="background-color: #000000"> このアップローダについての説明 </span> </font> </a> </p> <table width="75%" border="" bordercolor="#B8A470"> <!-- HTML前半部出力終了 ログ部テーブルタグ前 --> HF #/HTML Front **************************************************## # # Query *******************************************************## クエリ判定部 # my $qkey = ""; # クエリのキー値 # my $page = 0; # クエリのページ指定値 # # # unless( defined $ENV{'QUERY_STRING'} ) # クエリがないかどうか # { # クエリがない場合 # $page = 0; # 最新ページを表示 # } # # else # クエリがある場合 # { # # ($qkey, $page) = split( /=/, $ENV{'QUERY_STRING'} ); # クエリを取得 # } # # #/Query *******************************************************## # # HTML Log ****************************************************## HTML出力 ログ部 # my $cnt = @reada; # 書込み件数取得 # my $n = 0; # ページ毎出力件数カウント用 # my $no = ($cnt - 10 * $page); # ログ件端数 最終ページに対応 # # # my $name = ""; # 名前 # my $subject = ""; # タイトル # my $filename = ""; # ファイル名 # my $url = ""; # URL # my $mssid = 0; # ID # my $time = ""; # 書込み時刻 # my $size = 0; # ファイルサイズ # my $ipaddr = ""; # IPアドレス # my $host = ""; # ホスト名 # # # while( $no > 0 && $n < 10 ) # ログ出力は1ページ10件まで, ログがなくなれば終了 # { # # ($name, $subject, $filename, $size, $url, $mssid, $time, # ログの内容を各変数に格納 # $ipaddr, $host, $nouse) = split( /#@#/, $reada[$no - 1] ); # # $n++; # 出力件数カウントアップ # # # print <<HL; # HTML出力 複数行 # <tr> <td> <table width="720" height="20" border="0" align="left" cellpadding="6" bordercolor="#B8A470" bgcolor="#000000" id="submittion"> </td> </tr> <tr> <td height="0" bgcolor="#000000"> <strong> <font color="#CC0000"> No.$no $name ($mssid) "$subject" $url $time <!-- 各変数の値を出力 --> </font> </strong> </td> </tr> <tr> <td> <a href = "http://bj006.com/cgi/dfh/attach/$filename">$filename</a> <!-- ファイルへのリンク --> <font color="#E0E0E0"> : size = $size byte</font> <!-- ファイルサイズの表示 --> </td> </tr> </table> <!-- HTMLログ部出力終了 ログ部テーブルタグ後 --> HL $no--; # ログ件端数カウントダウン # } # # # Log Process *************************************************## 過去ログページへのリンク出力 # print <<LOG; # HTML出力 複数行 # <tr> <td> <a href="http://bj006.com/cgi/dfh/dfh.cgi"> <font size="3"> <strong> <span style="background-color: #000000">[NEWEST]</span> </a> Log → LOG # # $page = 1; # 全ログ表示に必要なページ数 == ページ番号 # while( ($cnt - $page * 10) > 0 ) # より古いログが存在する # { # # print '<a href="http://bj006.com/cgi/dfh/dfh.cgi?page='. # HTML出力 過去ログへのリンク部 # "$page". # ページ番号をクエリに # '"><span style="background-color: #000000">['. # # "$page". # ぺージ番号を表示に # ']</span></a> '; # HTML出力終了 過去ログへのリンク部 # $page++; # ページ番号カウントアップ # } # # print '</strong></font></td></tr>'."\n"; # HTML出力 # #/Log Process *************************************************## # print <<END; # HTML出力 複数行 # <tr> <td> <font size="-1"> <strong>Copyright © 2005-2008 baje, All rights reserved.</strong> <!-- コピーライト出力 --> </font> </td> </tr> </body> <!-- HTML出力の終了 --> </html> <!-- HTML出力の終了 --> END #/HTML Log ****************************************************## # exit; 関連ページ †Perl・CGI入門/パッケージを使う/ID Roll 修正履歴 †
参考ページ †http://www.perl-labo.org/ |