共用ルーチン(入出力操作)

受信デコード、画面表示・メール発信・エラー表示、ファイル読取・表示・書込・追記・ロック

ご自由にテストください。 (入力項目の内容(例)は適宜変更してください。)

共用ルーチンの組込利用により、本プログラムの作成が簡明になります。
(また、各サブルーティンを個別に本プログラムにコピー、利用することもできます。)
  1. フォーム送信(データ受信・デコード) (続くすべての操作でテストされます)
    複数入力$multi_item
    $multi_max
    @multi_name = ('a','b','c');
    @multi_nmbr = (0,0,0);
    複数入力:項目数(例:3)
    1項目最大入力数
    項目名「name」
    各項目入力数(初期設定)
    サブルーチン&io_decode;(引数なし)
    (改行コード統一(LINUX)) $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

    $g_upfileno
    @g_upfilename

    @g_upfilevalue

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

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

  2. 画面HTML表示・画面TEXT表示
    日時$date_min;
    メッセージ$dspmsg
    HTML表示場合、HTMLタグが有効です
    サブルーチン &io_dspexit($dspmsg);
    &io_textexit($dspmsg);

    (コード復元) $dspmsg =~ s/&rdquo;/\"/g;
    $dspmsg =~ s/&rsquo;/\'/g;
      (HTML 表示用) $dspmsg =~ s/&lt;/</g;
    $dspmsg =~ s/&gt;/>/g;
      (TEXT 表示用) $dspmsg =~ s/</&lt;/g;
    $dspmsg =~ s/>/&gt;/g;
      (改行) $dspmsg =~ s/\n/<br \/>/g;
    結  果別画面表示
  3. TEXTメール発信・HTMLメール発信
    日時$date_min
    $mailpath"/usr/lib/sendmail"
    発信アドレス$mailfrom(正確に)
    受信アドレス$mailto(正確に)
    タイトル$mailsbjct
    メッセージ$mailmsg
    HTMLメールの場合、HTMLタグが有効です
    サブルーチン &io_mailtext($mailfrom,$mailto,$mailsbjct,$mailmsg);
    &io_mailhtml($mailfrom,$mailto,$mailsbjct,$htmlmsg);
    (Mail用にコード復元) $mailmsg =~ s/&lt;/</g;
    $mailmsg =~ s/&gt;/>/g;
    $mailmsg =~ s/&rdquo;/\"/g;
    $mailmsg =~ s/&rsquo;/\'/g;
      (TEXT Mail用) $mailmsg =~ s/<br>/\n/g;
      (HTML Mail用) $mailmsg =~ s/\n/<br>/g;
    (日本語コード JIS) $mailmsg1 = Jcode->new($mailmsg)->h2z->jis; $mailsbjct1 = Jcode->new($mailsbjct)->h2z->jis;
    結  果別画面表示、発信者アドレス、受信者アドレス
  4. エラー表示、管理メール
    日時$date_min
    画面コメント$errmsg
    管理メール
    追加コメント
    $errref
    受信アドレス$manager(管理メール用)
    サブルーチン&io_errexit($errmsg,$errref,$manager);
    結果画面表示、受信アドレス
  5. ファイル読取・書込・追記
    読取書込追記
    ファイルアドレス$file1 : 
    行数全行
       最初の指定数
       OPENのみ
                 $size=""
                 $size=1~99
                 $size="0"
    (OPENのみの場合)ファイルハンドル:f1_FILE、最後に close(f1_FILE) 必要
    データ-@f1_LINES : 
    エラー中断$out="err"(エラーコメントを画面表示、管理メールの後、中断)
    サブルーチン $size=&io_fileread($size,$file1,$out);
    $size=&io_filewrite($size,$file1,$out);
    $size=&io_filenewcr($size,$file1,$out);(上書不可)
    $size=&io_fileoverwr($size,$file1,$out);(上書のみ)
    $size=&io_fileadd($size,$file1,$out);          
    (中間改行コード
    変換)
    $f1_LINES[$i]
    =~ s/\n/<br \/>/g;
    @f1_LINES[$i]
    =~ s/\n/<br \/>/g;
    結果別画面表示
    データ@f2_LINES--
    行数             $size:順調の場合
    エラー文言             $size:不調の場合のコメント
  6. ファイル・アップロード
    フォームform  の内に:enctype = "multipart/form-data"
    input  の内に:type = file" name = "upfile"
    アップロード
    ファイルアドレス

    テストは 50k 未満のGIFファイルで
    アップロード先
    アドレスリスト
    @upfilelist
    サブルーチン&io_upfile(@upfilelist);
    結  果別画面表示
  7. ファイルロック  (書込の同時実行の防止などのために)
    1. ロックファイル(上記の io_filewrite, io_fileadd, および下記テストで使用)
      $io_lockfilecg_02lock30.txtクリックで内容表示
      他のプログラムでは必要に応じてロックファイルを設定します。

    2. ロック
      エラー中断$out="err"(エラーコメントを画面表示、管理メールの後、中断)
      サブルーチン$lockstatus=&io_lockup($lockfile,$out)
      結  果$lockstatus

      順調の場合は:ロック直前・直後内容
      不調の場合:ロック中、またはロックファイル不在の内容
    3. アンロック
      エラー中断$out="err"(エラーコメントを画面表示、管理メールの後、中断)
      サブルーチン$lockstatus=&io_unlock($lockfile,$out)
      結  果$lockstatus

      順調の場合は:アンロック直前・直後の内容
      不調の場合:ロックファイル不在の内容
    4. 他によるロック中のロック指示
      テスト操作10 秒お待ちください

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

  8. ディレクトリ内のファイル表示
    1. ディレクトリ・リストからファイル・リストの作製
      ディレクトリ・
      アドレスリスト
      @dirslist
      サブルーチン$f2_filenmbr=&io_dirsfilelist(@dirslist)
      結  果$f2_filenmbr
      @f2_filelist
      ファイル総数
      ファイルリスト(配列:0 ~)
    2. ファイル・リストからリンク表示
      ファイル数
      ファイル・
      アドレスリスト
      $filenmbr
      @filelist
      サブルーチン&io_filelistdsp($filenmbr,@filelist);
      結  果別画面表示(TEXTはソースで)
    3. ディレクトリ内のファイル・リンク表示(前2つのプログラムを利用)
      ディレクトリ・
      アドレスリスト
      @dirslist
      サブルーチン&io_dirslistdsp(@dirslist);
      結  果別画面表示(TEXTはソースで)
  9. ファイル表示(text、html)
    ファイルアドレス$file1
    サブルーチン&io_filedsp($file1);
    結  果別画面表示(TEXTはソースで)
    HTMLファイル、TEXTファイル(HTML ファイルの拡張子を.txtにして)の双方でテストください。

  10. 画像ファイルの自動表示
    例 : <img src = "../cgi-bin/cg_0230.cgi?work=imgdsp&file1=../../f21img/star_s.gif" />
    サブルーチン&io_imgdsp($file1);
    結  果画像自動表示

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

  1. このサーバーでは
    パスファイル
    /home/st_cntrl30.cssSTYLESHEET
    basiccgi30/cntrl/cg_0230.html
    cg_02lock30.txt
    本ページ
    ロックファイル
    cgi-bin/ cg_0230.cgi

    cg_00io30.pl
    cg_00st30.pl
    本(テスト用)プログラム
    共用ルーチン
      入出力操作
      文字列操作
    02data/cg_02dt.txt
    任意のファイル
    テスト用データ
    02upfile/任意のファイルアップロードファイル
    
  2. CGI共用ルーチンでは、原則として、橋渡しのグローバル変数名には通常「 _ 」を含み、内部変数はローカル「 my 」または「 local 」設定をしています。

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

  4. 要確認・変更箇所は、HTML、CGI 両ファイル上に
    ====begin===================
    ====end=====================
    で明記してあります。
    (特に、サーバにより各ファイル・URLのパス設定が異なります。)
トップへ
W3C/xhtml:OK   08年 10月 27日改訂  ご批評・ご意見賜りたく(表紙へ)