SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

CGI-Perl 基礎実地編 - 実習12 (標準ファイル入出力)

■test12.cgi

------ ↓ ここから ↓ ------
#!/usr/local/bin/perl

#// 準備
  $fname = 'test.txt';
  $cufld = '.';
  $dbfld = '/w_test/';
  $path  = $ENV{'PATH_INFO'};

#// 動作環境セット
  if (($i = index($path, $dbfld)) != -1) {
    $cufld = '..' . substr($path, $i, $i + length($dbfld) - 1);
  }

#// ファイル書き込み
  open(FILE, ">$cufld/$fname") or die;
  print FILE 'やっほ〜。', "\n";
  print FILE 'うまくライトできるかしらん。(^^)', "\n";
  close(FILE);

#// ファイル読み込み
  open(FILE, "$cufld/$fname") or die;
  @rec = <FILE>;
  close(FILE);

#// HTML ヘッド出力
  print "Content-type: text/html\n\n";
  print "<HTML>\n";
  print "<P>-- 標準ファイル入出力テスト --</P>\n";

#// レコード表示
  foreach (@rec) {
    print $_, '<BR>';
  }

#// HTML テイル出力
  print "</HTML>\n";

#// 終了
  exit(0);
------ ↑ ここまで ↑ ------

■解説

  ・この test12.cgi は、test.txt に書き込んだデータを読み込んで、
    ブラウザに表示します。

  $dbfld = '/w_test/';
            |_ PWS など、実行 cgi の場所がカレントとならないような環境
               での動作環境設定に使用するテストフォルダ名

    $cufld = '..' . substr($path, $i, $i + length($dbfld) - 1);
              |_ PWS イントラネット環境では、常に cgi-bin がカレントと
                 なってしまうので、/w_test/test12.cgi のロケーションの
                 場合、/w_test/ がパスに含まれていれば、PWS 用の環境を
                 セットする。
                 この場合、'../w_test' が $cufld にセットされる。

  open(FILE, ">$cufld/$fname") or die;
  |    |      ||                  |_ オープンエラー時処理中止
  |    |      ||_ パス/ファイル
  |    |      |   test12.cgi と同じフォルダの test.txt となる
  |    |      |_ 上書き出力モード
  |    |_ ファイルハンドル
  |_ ファイルオープン関数

  print FILE 'やっほ〜。', "\n";
        |     |_ 出力リテラル
        |_ 出力ファイルハンドル

  close(FILE);
  |     |_ ファイルハンドル
  |_ ファイルクローズ関数

  open(FILE, "$cufld/$fname") or die;
  |    |      |                  |_ オープンエラー時処理中止
  |    |      |_ パス/ファイル (読み込みモード)
  |    |_ ファイルハンドル
  |_ ファイルオープン関数

  @rec = <FILE>;
  |      |_ ファイルハンドルが示す入力から読み込む
  |_ 改行コードで配列変数 @rec に全レコードをセット
     @rec[0] などの各レコードの末尾には "\n" が含まれているので注意!!

■補足

  ・実際には、ファイル出力はマルチユーザを考慮したければならない。
    同時に同一ファイルに複数のユーザがアクセスしたとき、書き込みモードは
    ファイルを破壊する可能性がある。
    ファイルロックなど、必要な手段を講じること。
    但し、不用意なファイルロックは、無限ループやアクセス不能をまねく。
    できるだけ排他制御の少ない仕様を検討した方が良い。

■実地

  ・test12.cgi も実際に作成してテストしてみましょう。

  ・尚、イントラ環境など、ローカルのカレント環境がわからない場合は、
    次の実地13 にある test13.cgi でカレント環境を調査して下さい。
    通常の UNIX CGI-Server なら、test12.cgi を無修正で実行できると
    思います。

■CGI-Perl 基礎実地編資料
■CGI-Perl 基礎編資料
■CGI-Perl 応用実地編資料
■PHP 基礎編資料
■PHP + MySQL 編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2017 Y.SAK