FUJI21・やさしく・CGI

共用プログラム・テスト

入出力操作(受信デコード・画面表示・メール発信・エラー表示通知
ファイル読取・書込・追記・ロック)


ご自由にテストください(入力項目の内容(例)は適宜変更してください。)
受信内容(原文、日本語は「JIS」コード)を含みデバッグ用の「PRINT」の結果が例示されます。
共用プログラムの組込利用により、本プログラムの作成が簡明になります。
(また、各サブルーティンを個別に本プログラムにコピー、利用することもできます。)

フォーム送信(データ受信・デコード)(続くすべての操作でテストされます)
ファイル・アップロードのためのフォーム
ACTION の内に:ENCTYPE = "multipart/form-data"
INPUT  の内に:TYPE = file" NAME = "upfile"

複数入力$multi_item
$multi_max
@multi_name = ('a','b','c');
@multi_nmbr = (0,0,0);
複数入力:項目数(例:3)
1項目最大入力数
項目名「NAME」
各項目入力数(初期設定)
サブルーチン&de_code; (引数なし)
(日本語コード統一(SJIS))&jcode'convert(*value, 'sjis');
(改行コード統一) $value =~ s/\015\012/\012/g;
$value =~ s/\015/\012/g;
(HTMLタグコード回避)$value =~ s/</&lt;/g;(&は半角)
$value =~ s/>/&gt;/g;
* XSS(Cross Site Scripting) 防止
(文字列区切りコード回避)$value =~ s/\"/&rdquo;/g;
$value =~ s/\'/&rsquo;/g;
結  果$g_str受信内容 (ENCTYPE の有無により形式が異なる
%cgi
@multi_nmbr
@multi_table

$upfileno
@upfilename

@upfilevalue

単数入力項目の内容(ハッシュ)
各複数入力項目の入力欄数
全複数入力項目の内容
  (配列:0 〜)
アップロード・ファイル入力欄数
ファイル名
 (配列:0 〜、空欄:----)
アップロード・ファイルの内容
 (配列:0 〜、空欄:----)

アップロード・ファイルの保存
ファイル名$f1_filelist[$i]保存後ファイル名(パス)
サブルーチン&up_file(@f1_filelist);(既存ファイルの上書可)

画面表示
日時$date_min;
メッセージ$dsp_msg
サブルーチン&dsp_form($dsp_msg);
(HTML表示用に
コード復元)
$dsp_msg =~ s/\n/<BR>/g;
$dsp_msg =~ s/&lt;/</g;(&は半角)
$dsp_msg =~ s/&gt;/>/g;
$dsp_msg =~ s/&rdquo;/\"/g;
$dsp_msg =~ s/&rsquo;/\'/g;
結  果別画面表示

メール発信
日時$date_min
$mail_path"/usr/lib/sendmail"
発信アドレス$mail_from(正確に)
受信アドレス$mail_to(正確に)
タイトル$mail_sbjct
メッセージ$mail_msg
サブルーチン&mail_form($mail_from,$mail_to,$mail_sbjct,$mail_msg);
(Mail用にコード復元
日本語コード(JIS))
$mail_msg =~ s/<BR>/\n/g;
$mail_msg =~ s/&lt;/</g;(&は半角)
$mail_msg =~ s/&gt;/>/g;
$mail_msg =~ s/&rdquo;/\"/g;
$mail_msg =~ s/&rsquo;/\'/g;
&jcode'convert(*mail_sbjct,'jis');
&jcode'convert(*mail_msg,'jis');
結  果別画面表示、発信者アドレス、受信者アドレス

HTMLメール発信(html_msg は HTMLファイルの記述)
サブルーチン&mail_html($mail_from,$mail_to,$mail_sbjct,$html_msg);

エラー表示、および通知(管理メール)
日時$date_min
プログラム名$prg_no例:"cg_0210"(管理メール用)
操作種類$work例:"err_exit"(管理メール用)
画面コメント$err_msg
管理メール
追加コメント
$err_ref
受信アドレス$manager"cntrl@fuji21.xx.yy(管理メール用)
受信アドレス$server"admin@fuji21.xx.yy"(管理メール用)
サブルーチン&err_exit($err_msg,$err_ref);
結果画面表示、管理メール(テストなし)
close(f1_FILE);、&un_lock($lock_file);含む

プログラム終了表示、および通知(管理メール)
日時$date_min
プログラム名$prg_no例:"cg_0210"(管理メール用)
操作種類$work例:"end_exit"(管理メール用)
コメント$end_msg
受信アドレス$manager"cntrl@fuji21.xx.yy"(管理メール用)
受信アドレス$server"admin@fuji21.xx.yy"(管理メール用)
サブルーチン&end_exit($end_msg);
結果画面表示、管理メール(テストなし)
close(f1_FILE);、&un_lock($lock_file);含む

ファイル読取・書込・追記(ここでのテスト表示なし)
読取書込追記
ファイルパス・名称$f1_file      
行数全行
   指定数
   OPENのみ
              $f1_SIZE=""
              $f1_SIZE=1〜99
              $f1_SIZE="0"
(OPENのみの場合)ファイルハンドル:f1_FILE、最後に close(f1_FILE) 必要
データ-@f1_LINES@f1_LINES
エラー中断
$out="err"(コメントを画面表示、管理メールの後、中断)
サブルーチン $f2_SIZE=&file_read($f1_SIZE,$f1_file,$out);
       &file_write($f1_SIZE,$f1_file,$out);
       &file_newcr($f1_SIZE,$f1_file,$out);(上書不可)
       &file_overwr($f1_SIZE,$f1_file,$out);(上書のみ)
            &file_add($f1_SIZE,$f1_file,$out);
(改行コード変換)$f1_LINES[$i]
=~ s/\n/<BR>/g;
@f1_LINES[$i]
=~ s/\n/<BR>/g;
結果
行数$f2_SIZE
(全行の場合)
--
データ@f2_LINES--
結果検証$err_msg:不調の場合のコメント、順調の場合は「 0 」

ファイルロック(書込、書換の同時実行の防止などのために)

  1. ロックファイル$lock_filecg_02lock.txtクリックで内容表示
  2. トラブル処理$out="err"ロックファイル不在の場合のコメントを画面表示、
    管理メールの後、「exit」
    サブルーチン$lock_status=&lock_up($lock_file,$out)
    結  果$err_msg

    $lock_status

    別画面表示ロック中(ロックファイル不在)の表示
    (順調の場合は「 "0" 」)
    ロック直前の内容および
    現在の状況(新設定、旧継続)
    注:$out="err" の指定により、ロック中(または、ロックファイル不在)の場合の
      コメントを画面表示、管理メールの後、「exit」
  3. トラブル処理$out="err"ロックファイル不在の場合のコメントを画面表示、
    管理メールの後、「exit」
    サブルーチン$lock_status=&un_lock($lock_file,$out)
    結  果$err_msg

    $lock_status

    別画面表示ロックファイル不在の表示
    (順調の場合は「 "0" 」)
    アンロック直前の内容および
    現在の状況(新設定)
  4. テスト操作10 秒お待ちください
    結  果別画面表示

ロック、アンロックと共に「テスト操作」を行ってください。
  1. 操作の前後では、ロックとアンロックが行われます
    (他による操作の同時実行を防止します)。
  2. 他によるロックの前、アンロックの後では、操作は実行されます。
  3. 他によるロック中の場合、
    • 60 秒以前にロックの場合は前のロックを自動的に解除して
      (以前の操作の中断などでアンロックが行われていないことがあります)、改めてロックし操作を実行します。
    • 10 秒間はアンロックを待って、アンロックされると改めてロックを行い操作を実行します。
    • 以上を除き、操作は実行されず、「後に再試行」の指示が出ます。

ディレクトリ内ファイルリスト(次々のプログラムに含む)
@f1_dirlist
サブルーチン$f2_filenmbr=&dirs_list(@f1_dirlist)
結  果$f2_filenmbr
@f2_filelist
ファイル総数
ファイルリスト(配列:0 〜)

ファイルリスト・リンク表示(次のプログラムに含む)
$f1_filenmbr
@f1_filelist
サブルーチン&list_dsp($f1_filenmbr,@f1_filelist);
結  果別画面表示

ディレクトリ内ファイルリンク表示(前2つのプログラムを利用)
@f1_dirlist

サブルーチン
&dirs_dsp(@f1_dirlist);
結  果別画面表示

ファイル表示(text、html)
ファイル名$f1_file
サブルーチン&file_dsp($f1_file);
結  果別画面表示

ファイルバックアップ(コピー)
$data_file../04data/.txt対象ファイル名(パス)
全ファイル一覧(ディレクトリ:../04data)から対象をお選びください
$backup_file../04data/.txtバックアップファイル名(パス)
サブルーチン&file_backup($data_file,$backup_file);
(既存の上書き不可)
結 果全ファイル一覧(ディレクトリ:../04data)

ファイル繰越(対象ファイル初期化)(ここでのテスト表示なし)
$data_file../04data/.txt対象ファイル名(パス)
$trans_file../04data/.txt繰越ファイル名(パス)
サブルーチン&file_transfer($data_file,$transfer_file);
(既存の上書き不可)
結 果

プログラムご希望の方は:

  1. このサーバーでは
    パスファイル
    /home/
    (URLでは省略)
    basiccgi/ cntrl/ cg_0210.html
    cg_02lock.txt
    本ページ
    ロックファイル
    cg_00.css
    STYLESHEET
    cgi-bin/ cg_0210.cgi

    cg_00io10.pl
    cg_00st10.pl
    jcode.pl
    本(テスト用)プログラム
    共用プログラム
      入出力操作
      文字列操作
      日本語処理

  2. 基礎の共用(〜6)プログラムの内容は、目次から各該当ページをご参照ください。
    原則として、橋渡しの変数名には通常「 _ 」を含み、内部変数はローカル「 local 」「 my 」設定をしています。

  3. CGI(.cgi/.pl)、CSS、JavaScriptファイルは内容表示のために、仮の拡張子「.txt]を使用しています。
    HTML ファイルのソースコードの参照は、画面右クリック「ソースの表示」で。
    FRAME ファイルのソースコードの参照はメニューバーの「表示」「ソース」で。

  4. 要確認・変更箇所は、HTML、CGI 両ファイル上に
    ====begin===================
    ====end=====================
    で明記してあります。

  5. あわせて、左側の目次から「SSI・CGI 基本」から「SSI・CGI概要」、「CGI プログラム要領」、「CGI 呼出方法」を参照ください。
    (特に、サーバにより各ファイル・URLのパス設定が異なります。)
14”N 02ŒŽ 27“ú‰ü’ù
ご批評・ご意見賜りたく(表紙へ)