jyokyu:j08

第8回 CGIの利用

戻る

ここではウェブサイト上で動作するプログラム「CGI」の取り扱いについて解説します。

この演習では、USBメモリウェブサーバーを必要とします。

ウェブサーバーについては第3回 サーバーと色と画像の利用の冒頭部分 ウェブサーバー の項目に解説がありますので、事前に資料を確認し、ウェブサーバーが使用できる状態にしておいてください(WindowsであればMicroapacheが起動できる状態にしておいてください)。

まずは、CGIとは何かについて解説をしましょう。しばらくは基礎知識を身につけるための座学が続きます。

CGIとは

CGI (しーじーあい Common Gateway Interface)とは、ページ閲覧者によるアクセスに対応して、ウェブサーバー上でプログラムを起動する仕組みです。さらにそこから転じてプログラム自体のこともCGIと呼びます。

要するにCGIはサーバー上で動かせるプログラムということです。

通常のHTMLページの場合はWebサーバー上のHTMLファイルを単純に表示するだけですが、CGIを使うと、プログラムの実行結果を画面に表示するので、より柔軟なページを作成できます。

ここでは実際にCGIを動かす演習を行います。

CGIの用途

まずはCGIを扱う上での基礎知識について解説をしましょう。

CGIには以下のような特徴があります。j09_01.jpg

  • サイト上に入力された情報をサーバーに記録しておけます。
  • プログラム処理を行って、動的に変化するページを作れます。

この特徴を利用して、例えば以下のような様々なページを実現できます。

  • アクセスカウンタ:サーバーに記録した訪問回数を表示する処理を行います。
  • 掲示板やブログ:利用者の書き込み記事を記録し、ページに表示する処理を行います。
  • ゲーム:利用者のキー操作などを元にゲーム画面表示、スコアなどを記録する処理を行います。
  • ショッピングカート:入力された情報を記憶、金額計算、メール送信、発注情報の管理などを行います。

このように状況によって表示が変化する「動的コンテンツ」を実現できるのがCGIの特徴です。

CGIのしくみ

CGIファイル

CGIはプログラムですが、その正体は、プログラミング言語が記述されたテキストファイルです。 要するに単純に文字が書いてあるだけのファイルで、テキストエディタアプリで簡単に編集ができます。

<?php
// アクセスカウンタ
mb_internal_encoding('UTF-8');

$dat='count.txt'; // このファイルと同じ名前の.txt ファイルを、カウント保存用データファイルとする。(count.txt)
if(!file_exists($dat)){ file_put_contents($dat,'1',LOCK_EX); }  // データファイルが存在しないなら作成する。
$fp = @fopen($dat,'r+') or die("File open error : {$dat}".PHP_EOL); //読み書きモードでオープン。開けなかったら強制終了。
$count = trim(fgets($fp, 64));	//64バイトorEOFまで取得
if($count==''){ $count=1; }     //何らかの理由でカウント数値が読み取れなかったらとりあえず1とみなす。
echo $count++;                  //カウンタ表示してインクリメント
rewind($fp);                    //ポインタを先頭に
fputs($fp, $count);             //新しいカウントを書き込み
fclose($fp);                    //ファイルを閉じる
?>
簡単なCGIの例

上の図は、簡単なCGIファイルの中身です。HTMLなどと書かれている内容は異なりますが、ある決まりで文字を書き込んでいるという点で、一緒であることが分かるかと思います。つまりプログラムと言っても単に文字を書き込んだだけのファイルであり、特別なファイルではないというわけです。😁

なのでもしCGIプログラムを作りたくなったら、テキストエディタさえあれば他に特殊なアプリケーションなどは不要です。プログラム作りは、元手いらずですぐに始められるのです。

CGIはサーバーで動作する

CGIプログラムは、ウェブサーバー上で動作します。よってCGIを動かしたければ、あらかじめCGIファイルウェブサーバー上にアップロードしておく必要があります。(関連ファイルがある場合は、あわせてアップロードが必要です。)

その後、ブラウザから http://xxxxx/xxxx.cgi のようなURLにアクセスすると、プログラムの動作結果が画面に表示されるという流れです。

サーバー上で動作するCGI

注意してください。CGIプログラムはサーバー上で動作させるものであり、通常のパソコン上では動作しません。つまり、あなたのパソコン上でCGIファイルを単にダブルクリックしても動作しません。 必ず MicroApache 等のサーバーを使用する必要があります!

CGIとデータのやりとり

ウェブページを、ある決まりに従って記述するとウェブサーバーにCGIプログラムの起動を依頼することができます。

この時CGIプログラムには、さまざまな値を引き渡すことができます。

たとえばページの閲覧者が、入力欄に記入した値や、チェックボックス☑のクリック状況、どのボタンをクリックしたか、メニューのどの項目を選択したか などです。

例えばオンラインショップ Amaz○n の場合なら、あなたがページ上でクリックした商品と、入力された必要個数をCGIが受け取って、計算した料金を画面に表示し、「注文確定」ボタンが押されたら発送手続きをすすめる、という具合です。

こういった入力パーツを「フォーム(form)」と言い、HTMLで特別な書き方をすれば表現できます。この授業では、時間の都合で残念ながらフォーム関連のHTMLは取り扱いませんが、興味のある人は「HTML フォーム」といったキーワードでウェブ検索して調べてみましょう。HTMLを使ってボタンや入力欄などを作れることが分かるでしょう。

利用者の操作によってCGIが起動


ラジオボタン   
チェックボックス   
テキストボックス 
パスワード入力欄(ダミー) 
さまざまな「フォーム」の例
(これらはサンプルなので、触っても何も起こりません)

CGIは、上のようなさまざまなフォームを使って入力されたデータを受け取り動作するのです。

まとめ:CGIが動作する流れ

要するに、あなたがページ上にある各種フォームに書き込みを行い、ボタンをクリックすると、それに呼応してサーバー上のCGIが起動し、入力情報を受け取ります。

起動されたCGIプログラムは、入力値を受け取り、サーバー上でプログラム処理をし、その処理結果を画面に出力します。
なお出力結果を普通のウェブページのように見せるためには、CGIにHTML形式を出力させる必要があります(CGIを使いこなすには、プログラムを作る知識に加えて、HTMLの知識も同時に必要だということです)。

CGIが出力したHTMLを利用者が閲覧

つまりCGIは、閲覧者が入力した情報を受け取って処理し、HTMLを出力してウェブページを作り上げるプログラムと言えます。

普通のHTMLだけで作られたホームページは、閲覧者に一方的に情報を見せるだけですが、CGIは定められたプログラムを実行するだけでなく、閲覧者から情報を受け取れるのが最大の特徴で、インタラクティブ(双方向)な情報のやり取りができるという点が大きな特徴です。

プログラミング言語

CGIとは要するにプログラムなのですが、そのプログラムの書き方(プログラミング言語)には、いくつもの規格があります。

昨今CGIによく使われるプログラミング言語としては、現在 Perl (パール) または PHP (ピー・エイチ・ピー) と呼ばれるものがあります。

これらは異なるプログラミング言語ではありますが、よく似た部分もあり、一つ覚えれば別のものも覚えやすかったりします。

例えるなら「命令の文章を英語で書くか、フランス語で書くか」というイメージで考えてもらうと分かりやすいでしょう。何種類もの書き方があるわけです。おまけにちょっとずつルールが違うあたりも英語やフランス語とそっくりかもしれません。

まれに Perl や PHP 以外のプログラミング言語で記載されたCGIも存在します。例えば Ruby や Python といった別のプログラミング言語が使用される場合もあります。プログラムにも実にさまざまな書き方が許されるというわけです。

ここではCGIで使われる代表的なプログラミング言語「Perl」と「PHP」について、ごく簡単に解説します。

Perlとは

Perl(ぱーる)は、古くからCGIなどで使われるプログラミング言語です。

他のプログラミング言語の優れた機能を取り入れて作られた言語で、Windows や UNIX などさまざまな環境で動作します。 古くから存在するため、Perlで記述されたプログラムは広く普及しています。

しかし、Perlで日本語を取り扱う際には少し工夫が必要であったり、サーバー上にPerl製のCGIファイルをアップロードする際は、ファイルの「権限」(パーミッション)を正しく設定する必要があったりするなど、正しくCGIを動作させるために特殊な操作が必要になります。

PHPとは

PHP(ぴーえいちぴー) は、Perlよりも後に作られたプログラミング言語です。

Webページを作成することを目的に開発された言語で、比較的平易な文法でできているため、初心者でも習得しやすく扱いやすいプログラミング言語です。 Webページでの利用をサポートする機能も多く、全角文字などの扱いも簡単であるためCGIプログラムとして徐々に使われはじめています。

しかし普及度ではPerlに劣るため、一部のCGIはPHPに対応しておらず、Perlなど他の言語で書かれている場合があります。

PerlとPHPの比較

簡単に言うと、PerlとPHPはそれぞれ以下のような特徴を持っています。

言語 Perl PHP
歴史 古い 新しい
言語の難しさ 難しい 簡単
CGIファイルの取り扱い 難しい 簡単

CGIでできることはPerlとCGIであまり差はありません。どちらも一通りのアクションをプログラムできます。また、動作速度もあまり差はありません1)

PHPは素直で扱いやすいです。初心者が学ぶのにもおすすめです。

しかし古くからある有名なCGIは、Perlで書かれていることもあります。

Javascript

Javascript(ジャバスクリプト)もプログラミング言語の一種です。
これも PHP や Perl と同様にウェブページ上でさまざまな処理を行えるものです。

しかし Javascript はサーバー上ではなく、閲覧者のブラウザ上で動作するプログラムです。そのため Javascript はサーバーが無くても動きます。よって厳密には CGI とは異なります。

ここでは「ふーんそういうのもあるのか」ぐらいに思っていただければOKです。
とりあえずウェブページでは、いろんな種類のプログラムを動かせるというわけですね!

CGIファイルの見た目

CGIファイルは Perl や PHP といったプログラミング言語で書かれたファイルであることは説明しましたが、ファイル名に一定のルールがあるので、ファイル名を見ただけで、どんなプログラミング言語で書かれたCGIファイルなのか、ある程度分かります。j09_03.jpg

書かれているプログラミング言語によって、動作させるための扱いが若干異なるので、見た目で区別できるようになっておきましょう。

  • Perlが書かれたCGIファイルは、拡張子が .cgi になっているのが通例です。
    例:mail.cgi diary.cgi など
  • PHPが書かれたCGIファイルは、拡張子が .php になっているのが通例です。
    例:calendar.php main_include.php など
  • Javascriptが書かれたファイルは、拡張子が .js になっているのが通例です。
    例:basic.js myrule01.js

このようにファイル末尾の拡張子を見て、プログラムの種類を判別できます。(もし拡張子が表示されていない場合は、拡張子を表示させる設定を行っておきましょう)

CGIをサーバーで動作させる場合に、Perl製CGIかPHP製CGIかによって、ファイルの扱いが若干異なります。詳しくは後述します。

編集作業

場合によってはプログラムを調整したくなるかもしれません。設定を変えたい場合などです。そのためには、CGIファイルの中身を修正する必要があります。

しかし、日本語等の全角文字を書き込む時は取り扱いに注意が必要です。

日本語には複数の「文字コード」が存在します。文字コードとは、文字を表示するための規格のようなものです。代表的な日本語の文字コードには JISShift JISEUCUnicode といったさまざまな種類があり、編集する際にアプリがこれらを正しく取り扱える必要があります。

アプリが文字コードの取り扱いを間違ってしまうと、文字化けが発生したり、プログラムが誤動作したりすることがあります。 そのため、文字コードを正しく取り扱える編集アプリ(テキストエディタ)を使う必要があります。

要するに授業で紹介しているような、しかるべきテキストエディタアプリで編集しないと、文字化けなどが発生してしまうかも、ということです。

さまざまなテキストエディタ

VSCodeは、CGIファイルを正しく取り扱えるテキストエディタです。
VSCode公式サイト https://azure.microsoft.com/ja-jp/products/visual-studio-code/
(WindowsでもMacでも使用できます。あと入力支援機能が強力で作業が楽です)

「サクラエディタ」も、さまざまな日本語文字コードを正しく取り扱え、相互変換なども行えるので、CGIファイルの編集の際に便利です。(ただしWindows専用です)
サクラエディタ公式サイト https://sakura-editor.github.io/

一方、Windowsに標準でインストールされている「メモ帳」アプリは、特に古いバージョンのものは文字コードを正しく処理できない場合があるため「文字化け」が発生する場合があります。よってCGIファイルの編集にはあまり適していません。

CGIの編集をする場合は VSCode や サクラエディタ などのテキストエディタアプリを使うのがおすすめです。

なお文字化けが発生してしまった場合のフォローなど、詳しく知りたい場合は、コンピュータ基礎実習サイトの補足資料コーナーにある「文字化けについて」の資料を参考にしてください。

CGIファイルの開き方

CGIを編集するには、HTMLと同じように、CGIファイルをテキストエディタのウインドウにドラッグして入れるだけで開けます(もし他のテキストエディタを使用している場合も、だいたい同じです)。

エディタのウインドウに書類を入れて開けます。

たいていのテキストエディタで通用する方法なので、ぜひ活用してみてください。

CGI使用上の注意

CGIファイルを取り扱う際は、いくつか注意点があります。

「権限」の設定

Perl で記述されたCGIを動作させるには、多くの場合サーバー上で「権限(パーミッション)」を正しく設定する必要があります。適切な権限の設定はCGIによって異なるので、CGIに付属の説明書などを確認する必要があります。なお一般的なアップロード用アプリには、サーバー上で権限を設定する機能も付属しています。通常はアップロードした後に、そのまま権限の設定をする流れになるでしょう2)

この授業では時間の関係上「権限」の詳細については触れません。興味のある人は「CGI 権限 とは」といったキーワードでウェブ検索して調べてみましょう。

一方、PHPで記述されたCGIファイルは、ほとんどの場合「権限」の設定をしなくても動作します。サーバーにアップロードするだけで問題なく動き出すので簡単です。

要するに、Perl製CGIを動作させるには特殊な権限設定の手続きが必要ですが、PHP製CGIであればその必要が無いので扱いやすいということです。

今回は入門編として、取り扱いが簡単なPHPの取り扱いを実践します。

実際にCGIをサイト内に設置する

前置きが長くなってすみません! 😅

それでは、基礎知識を踏まえた上で、いよいよ作業の時間です。

実際に CGI プログラムをサーバーに設置してみましょう。今回は取り扱いが簡単なPHP製のCGIを試します。

サーバーを準備する

ウェブサーバーが稼働している状態にしてください。
サーバーのくわしい設定方法は第3回 サーバーと色と画像の利用の記事を参考にしてください。

Windowsであれば run.cmd でMicroapacheを実行し、Macであれば所定のコマンドを実行して、サーバーを稼働状態にします。

Microapacheであれば、htdocsフォルダ内が作業フォルダとなります。これから行う編集作業のために htdocs フォルダを開いている状態にしましょう。

アクセスカウンタを設置する

サーバーの準備はできましたか? それでは実際にCGIファイルを実行させてみましょう。

まず簡単なCGIとして「アクセスカウンタ」CGIを設置します。

アクセスカウンタは、ページが表示された回数をカウントするためのシンプルなプログラムです。 通常は、CGIを配布しているサイトなどからCGIプログラムをダウンロードして手に入れ、インストール作業を行いますが、ここでは簡単にダウンロードできるようにします。

以下の手順でインストールを行ってください。

インストール手順

  1. ここからCGIファイルをダウンロードします。
    アクセスカウンタ count.zip ← ここをクリックしてダウンロード
    (このアクセスカウンタは、CGI配布サイトレッツPHPで配布されているCGIを元に、一部修正を施したものです)
  2. 圧縮フォルダの中身を展開して、count.phpcount.txt という2つのファイルを取り出します。
  3. サーバーの公開用フォルダ内に、count.phpcount.txt を両方ともアップロードします。Microapache を使用している場合は htdocs フォルダ内にファイルを2つともコピーします。
    ファイルの配置
  4. ブラウザを起動し、count.php にアクセスします。
    Microapacheの場合は http://localhost:8800/count.php にアクセスします。
    (サーバーのトップページにあたるアドレス http://localhost:8800/count.php を付け足したアドレスです)
    画面上に「1」と表示されれば成功です。ページが表示された回数は「1回」というわけです。
    1

    CGIの実行結果
    (めちゃくちゃ地味ですみません)

  5. リロード(キーボードの F5 キーを押す)して画面を更新すると、数字が1ずつ増えていきます。

このように、count.php というCGIが、ページが表示された回数を数えて、サーバー上で記憶し、そしてその数字を画面に表示しているのです。

ちなみにこのCGIは、count.php と同じ場所にある count.txt にアクセス数を記録する単純な仕組みになっています。例えば count.txt の中身をテキストエディタで確認すると、現在のアクセス数が 3 のように数字で書かれている様子がわかります。ちなみに数字を書き換えればアクセスした人数を改変できるので、テキストエディタで編集して実際よりも多い数字に水増ししたりもできるでしょう。😵

MicroapacheでPHPが動かない場合

CGIにアクセスすると、ブラウザに以下のようなエラーが出る場合があります。

Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0

Fatal error: Unknown: Failed opening required 'E:/てすと/htdocs/count.php' (include_path='.;C:\php\pear') in Unknown on line 0

これは、Microapacheを設置した場所が良くない場合に発生するエラーです。

Microapacheの仕様で、日本語など全角文字やスペースなどを含むフォルダ内にMicroapacheを配置すると、CGIが正しく動作しません。 Microapacheより上位の階層のどこかに全角文字が含まれているだけでダメです。上の例では「てすと」というフォルダの中に収めたせいでエラーが発生しました。

そのため、Microapacheは、USBメモリの最上位階層 など、全角文字を含まない場所にコピーして動作させるのがおすすめです。(少々デリケートなヤツなのです)

他のページでもCGIを使う

単にアクセス回数の数値が表示されるだけのCGIプログラムでは、役に立たないと思うかもしれません。

はっきりいって地味ですし……🤣

しかし少し設定すれば、CGIを好きなページに読み込ませて動作させられます。あなたが作成したHTMLページ内に、アクセスカウンタの数字を表示させることもできるわけです。さまざまなページでアクセス回数を表示できるので、応用の幅が広がります。

ここでは、第2回目で制作した「ゴブリン・シチューのクイックレシピ」ページ recipe.html の中にアクセス数を表示させてみましょう。

えっ? recipe.html を無くしてしまいましたか? 仕方ないですね……。もし無くしてしまった場合は、以下をダウンロードして使ってください。もちろん、ダウンロードした recipe.htmlhtdocs フォルダの中に入れて使ってくださいね!

recipe.html
<!DOCTYPE html>
<html lang="ja-JP">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>ゴブリン・シチューのクイックレシピ</title>
</head>
 
<body>
<center><h1>ゴブリン・シチューのクイックレシピ</h1></center>
 
<p>このレシピで手早くおいしいゴブリン肉を使ったシチューを作ることができます。<br>
このレシピは、<b>私が長年の冒険を通じて編み出したレシピ</b>をアレンジしたものです。</p>
<p>ゴブリン・シチューは冒険者の間でよく振る舞われる、とろみのあるおいしいシチューです。
サラダやピタパンと一緒に食べるととてもおいしいです。</p>
 
<h2>材料</h2>
 
<ul>
<li>ゴブリン肉 300g(骨を取り除いたもの)</li>
<li>スライムの粘液 大さじ2</li>
<li>マンドラゴラのスライス 5枚</li>
<li>野菜ブイヨン 500ml</li>
<li>玉ねぎ 1個(みじん切り)</li>
<li>にんにく 2片(みじん切り)</li>
<li>にんじん 2本(スライス)</li>
<li>セロリ 1本(スライス)</li>
<li>塩 小さじ1</li>
<li>黒こしょう 少々</li>
<li>ローリエの葉 1枚</li>
<li>オリーブオイル 大さじ1</li>
</ul>
 
<h2>作り方</h2>
 
<ol>
<li>オリーブオイルを鍋に熱し、玉ねぎとにんにくを炒める。</li>
<li>ゴブリン肉を加え、中火で表面が焼けるまで炒める。</li>
<li>にんじん、セロリ、マンドラゴラのスライスを加えて炒め合わせる。</li>
<li>スライムの粘液と野菜ブイヨンを加え、塩、黒こしょうで味を調える。</li>
<li>蓋をして弱火で30分煮込む。</li>
<li>器に盛り付けてローリエの葉で彩りを加えたら完成。</li>
</ol>
 
<p>風味を変えたい場合は、レモンとコリアンダー、唐辛子、ライムとチポトレ、ミント、ほうれん草とチェダーチーズなどを少量混ぜてみるのも良いでしょう。自分に合うものを試してみてください。</p>
 
<p>マンドラゴラは、味のアクセントになるので、なければ省いても大丈夫です。</p>
 
<h2>保存方法</h2>
 
<p>出来上がったゴブリン・シチューは、作ってから3日間ほどは使えるはずです。泡が出始めたら、必ず捨てること。保存する場合は密閉できる容器に入れて冷凍魔法で保存しましょう。</p>
 
<p>ゴブリン・シチューは冷凍保存に適していますが、2~3ヶ月以内に解凍して使うようにしましょう。</p>
 
</body>
</html>

recipe.html(再掲載)

recipe.html がすでにある場合は、そのまま利用できます。上の作例と多少違っていてもOKです。

以下の手順で作業して、recipe.html 内で count.php を動かしてみましょう。

  1. まずは状況確認です。htdocs フォルダ内を確認し、カウンターを表示させたいページ recipe.htmlcount.phpcount.txt が同じフォルダ内に配置されていることを確認します。
    htdocsフォルダ内の様子
  2. ページ内でPHPプログラムを動作させるには、そのファイルの拡張子が .php である必要があります。
    そこで recipe.html のファイル名を recipe.php に変更します。「右クリック」→「名前の変更」で名前変更できます(Macの場合は recipe.html を選択し、Return キーを押せば名前変更できます)。
    拡張子を .php に変えることで、サーバーはそのファイルでPHPプログラムを実行できるようになります。
    recipeの拡張子を変更
  3. recipe.php の内容を編集するために、テキストエディタで開きます。(中身はHTMLで書かれたページのはずです)
    そしてページ上の好きな位置3)<p>あなたは <?php include("count.php"); ?> 人目の冒険者です。</p> と記入します4)
    書き間違いを防ぐために、コピー Ctrl+C と貼り付け Ctrl+V を使って入力するのがおすすめです。
    <center><h1>ゴブリン・シチューのクイックレシピ</h1></center>
    <p>あなたは <?php include("count.php"); ?> 人目の冒険者です。</p>
     
    <p>このレシピで手早くおいしいゴブリン肉を使ったシチューを作ることができます。……
    
    count.phprecipe.php 内から呼び出す例
    「あなたは~人目の冒険者です」のメッセージ部分は好きな言葉に変えても構いません。また、書き込んだプログラム部分以外は通常のHTMLと全く同じように画面に表示されるので、従来のHTMLタグを使って自由に書き換えてOKです。
  4. ブラウザから recipe.php にアクセスします。アドレスは http://localhost:8800/recipe.php です。
  5. メッセージを記入した場所に「あなたは 5 人目の冒険者です。」などと表示されていたら成功です。
    ゴブリン・シチューのクイックレシピ
    あなたは 5 人目の冒険者です。 このレシピで手早くおいしいゴブリン肉を使った……
    実行結果
  6. F5キーを押して画面を更新(リロード)するたびに数字が1ずつ増え、「6人目」「7人目」のように変化するはずです。アクセスカウンタが機能していることがわかります。

これで、recipe.php のページ内でアクセスカウンタを動作させることができました。

今回の例では、include() というPHPの命令を使って、count.php を丸ごと読み込んで動作させる仕組みになっています。

なお recipe.php を他のファイルに読み替えて同じことをすれば、同様に他のページでもアクセスカウンターが動作します。

さらなる改造

アクセス人数が表示されるとはいえ、いささか地味な実行結果ですね。😂
試しに、もっと違う情報も表示してみましょう。

たとえば、現在の日時を表示させてみます。

  1. recipe.php をテキストエディタで開いている状態にします。
  2. 以下のように recipe.php にプログラムを追記します。
    先ほど記入したプログラムの下に Enter キーを押すなどして空行をいくつか挿入し、「ここから」~「ここまで」の範囲に書かれたプログラムを追記し、保存してください。
    <center><h1>ゴブリン・シチューのクイックレシピ</h1></center>
    <p>あなたは <?php include("count.php"); ?> 人目の冒険者です。</p>
    
    
    <!-- ↓↓↓ ここから ↓↓↓ --> <?php date_default_timezone_set('Asia/Tokyo'); // タイムゾーンを日本標準時に設定 $t=time(); $h=(int)date('H',$t); $mes=''; // 現在時刻を取得 echo '<p>現在日時は、'.date('Y/m/d H:i',$t).' です。<br>'; // 日時を表示 // 時間に応じて変わるメッセージを準備 if($h < 6){ $mes='お疲れさまでした。リセットボタンを押しながら電源をお切りください。'; } // 0~5時 else if($h >=18){ $mes='こんな夜ふけに わが教会になんのご用でしょうか?'; } // 18時以降 else if($h < 12){ $mes='生きとし生けるものは みな神の子。わが教会に どんなご用かな?'; } // 6~11時 else{ $mes='はい いらっしゃい! ここは 道具の店。どんな ご用でしょうか?'; } // 12~17時 echo $mes."</p>\r\n"; // メッセージを画面に表示 ?> <!-- ↑↑↑ ここまで ↑↑↑ -->
    <p>このレシピで手早くおいしいゴブリン肉を使った……
    現在時刻とメッセージを表示するCGI
  3. 再びブラウザから recipe.php にアクセスし、画面を更新(リロード)すると、ページ上に現在時刻とメッセージが表示されるようになります。
実行例


現在時刻とメッセージが
表示されます。

時刻はページを更新(リロード)したときの時間が表示されます。
また、時間帯に応じてさまざまにメッセージが変化することでしょう。

このようにCGIを使えば、状況に応じて異なる表示を行えるわけです。

PHP製CGIの動かし方まとめ

まとめると、PHPで書かれたプログラムを動作させるには、以下の設定を行えば良いでしょう。

  • プログラムを動作させるファイルの拡張子は .php にしておく必要があります。
  • PHPファイルの内容を編集するには、テキストエディタで開けばOKです(HTMLファイルと同じ扱い)。
  • HTMLが書き込まれている場合は、通常通りブラウザに表示されます。
  • <?php から ?> までの間に書いた内容がプログラムとして解釈され、実行されます。
  • プログラムの実行結果を確認するには、サーバー(Microapacheなど)を経由して、http://xxxxx/xxx.php のようにURLで目的のPHPファイルにアクセスする必要があります。
    • 必要なファイルはすべてサーバー内の所定の場所に集めておきましょう。Microapacheなら htdocs フォルダの中です。
    • PHPファイルを単にダブルクリックしてもプログラムは動作しません。

CGI設置のコツ

CGIはインターネット上で、いろいろな人が無料あるいは有料で配布していたりします。
サーバーがあれば、あなたはそれを自由に試すことができます。

もしあなたが別のプログラムを試してみたくなった場合も、取り扱いは基本的には同じです。

  • プログラム本体以外に、関連ファイルがある場合は、全てアップロードしましょう。
  • 設置方法や取り扱い方は、サイトの説明文などをよく読みましょう。
  • CGIを編集するときはCGI編集に適したテキストエディタを使いましょう。
  • それでも動作しないならあきらめも肝心。別のCGIを探しましょう。🤣

他のCGIも設置する

ここでもいくつかCGIを紹介しますので、余裕があればサーバー上で動かしてみましょう。

掲示板CGI(p++BBS)の修正版 pppbbs4_2018_1119.zip

掲示板CGI(p++BBS)の画面

カレンダーCGI calendar_2019_0604.zip

カレンダーCGIの画面

同様に上のリンクからダウンロードし、圧縮フォルダを展開後、サーバーにアップロードし、アクセスしてみてください。
詳しくは以下の手順で作業を行うと良いでしょう。

掲示板CGIについて

このCGIは「p++BBS」と名付けられており、好きなテキストを入力して、サーバー上に掲載できる、いわゆる掲示板を実現するためのものです。個人的に使えば、やることリストのようなメモを残しておく用途にも使えます。

ブログやニュースサイトなどのコメント欄にも、このCGIと似た仕組みが使われています。

設置と実行

  1. ダウンロードした圧縮フォルダを展開すると、bbs フォルダが入っています。
    大学のパソコンを使っている場合は、デスクトップに bbs フォルダが展開されます。
    この bbs フォルダを htdocs フォルダ内に入れれば設置完了です。
    bbsフォルダの設置
  2. CGIの本体は bbs フォルダ内の pppbbs.php です。よって http://localhost:8800/bbs/pppbbs.php でアクセスできます。

使い方は簡単で、入力欄に好きな名前とメッセージを入力してから「submit」ボタンを押せば、掲示板に文字が書き込まれます。各投稿に返信もできます。

  • 掲示板CGI(p++BBS)は、pppbbs.phpファイルを編集すれば設定を変更できます。もし余裕があれば pppbbs.php をテキストエディタで編集し、設定を変更してみましょう。

参考:p++BBSの修正箇所

以下の資料は掲示板CGI(p++BBS)を公式サイトから直接入手する場合の参考資料です。

掲示板CGI(p++BBS)は、CGI配布サイト レッツPHP 様で公開されているCGIですが、作者がプログラムを記述する際に、いくつかの手続きを省略して記述しています。

プログラム自体は間違っていないのですが、チェックが厳格なウェブサーバーでこのCGIの実行をすると、プログラムに必要な手続きが省略されている旨の警告メッセージが表示されてしまいます。 そこで、プログラムを少し修正して、警告メッセージが出ないようにしています。

このページに掲載されている「掲示板CGI(p++BBS)修正版」を使うのであれば、下に書いてあるような修正作業はあらかじめ行ってあるので不要ですが、参考までにどのような修正作業をしたかを記載しておきます。

みなさんがもし自力でレッツPHPからCGIをダウンロードして動作させる場合に、ウェブサーバーがエラーを出すようであれば以下を参考に修正を行うと良いでしょう。

ダウンロード

  1. レッツPHPのページ右上にある「スクリプト一覧」をクリックし、ダウンロードページに移動します。
  2. 「掲示板」コーナーの中にある「p++BBS」をクリックします。
  3. 「■ サンプル、ダウンロード」と書かれているコーナーの右にある「ダウンロード」リンクをクリックしてダウンロードします。
  4. 圧縮フォルダとして pppbbs4.zip という名前のファイルが保存されます。
  5. ダブルクリックするなどして「展開」すると、pppbbs4 という名前のフォルダが出来上がります。
  6. フォルダ名が長いので、「右クリック」→「名前の変更」などでフォルダ名を bbs に変更します。

ファイルの修正

  1. bbs フォルダの中見を確認します。 pppbbs.php という名前のファイルがあるはずです。これが、掲示板プログラムの本体です。
  2. 警告メッセージが表示されないよう pppbbs.php を修正します。テキストエディタで pppbbs.php を開き、2行目に空行を作成し、以下のように追記します。
    error_reporting(0);
    header("Content-Type: text/html;charset=Shift_JIS");
  3. 追記したら、「上書き保存」で保存します。

参考までに上記の設定は、「エラーを画面に表示させない」「CGIに使用している文字コードはShift JIS形式である(=画面上での文字化けを防ぐ)」という意味合いのプログラムです。

レッツPHPで公開されているCGIをチェックが厳格な環境で動作させるためには、おおむねこの修正を行えば良いので、参考にしてください。

カレンダーCGIについて

上記で紹介したもう一つのCGI「カレンダーCGI」について解説をします。

以下のリンクからダウンロードしてCGIを入手できます。

カレンダーCGI calendar_2019_0604.zip

カレンダーCGIの画面

  1. ダウンロードした圧縮フォルダを展開すると、calendar フォルダが入っています。
    大学のパソコンを使っている場合は、デスクトップに calendar フォルダが展開されます。
    この calendar フォルダを htdocs フォルダ内に入れてください。
    calendarフォルダの設置
  2. CGIの本体は calendar フォルダ内の index.php です。
    よってファイル名を省略して http://localhost:8800/calendar/ でアクセスできます。

特徴

カレンダーCGIは、清水が自作したスケジュール管理用のPHP製CGIです。以下のような特徴があります。

  1. クリックして予定を記入するだけの簡単操作
  2. 祝日などの表示に対応
  3. 画面の読み込み回数を減らした軽快な動作
  4. スマホなどでも扱いやすい画面レイアウト

とにかく簡単にすばやく予定を編集することを目標に作られています。

使い方

予定を書き込むには、日付をクリックし、開いた画面に好きな内容を書き込んで「OK」ボタンを押すだけです。
予定を削除したい場合は、予定の内容を全て消去し「OK」ボタンを押します。

クリックして予定を書くだけの
かんたんカレンダーCGI

各ボタンの機能などは、マウスカーソルをボタンに重ねるとヘルプメッセージが出現するので、そちらで確認してください。

各部にマウスカーソルを重ねると
ヘルプメッセージが出ます。

長文を書き込むと省略表示されますが、
マウスカーソルを重ねると
全文が表示されます。

参考:設定の変更方法

設定ファイルを直接編集することで、カレンダーCGIのいくつかの設定を変えられます。設定の記述方法など詳細は、各設定ファイル内の説明コメントを確認してください。

  • calendar.ini
    カレンダーの基本的な設定が行えます。詳しくは同ファイル内に書かれたコメントを参照してください。
    • たとえば管理用パスワードを追記すると、カレンダーを表示するためのパスワードを設けられます。他人に予定表を見られたくない場合に便利です。パスワードは一度入力すると、次回からは入力が省略されますが、「設」ボタンで設定画面にアクセスし「ログアウト」をすると、再びパスワード入力を求められるようになります。
  • holiday.dat
    休日の情報を記録したファイル。編集すれば新しく制定される休日に対応できます。
    設定の書き方は holiday.dat 内に書かれたコメントを参照してください。
  • schedule.dat
    カレンダーに記入した全ての予定データが格納されるファイル。データをバックアップしたい場合は、このファイルを保存しておくと良いでしょう。

まとめ

このようにCGIを使うと、掲示板や予定表のような動的コンテンツを作ることができます。

CGIプログラムを作ることは難しくとも、ネット上で開されているCGIを設置するのであれば、プログラムの知識が無くとも比較的簡単に行えるかと思います。

興味がある場合は、さまざまなCGIにチャレンジしてみましょう。(紹介したカレンダーCGIなどは割と便利かと思いますので、もしよければ日常で使用してもらってもOKです)

課題

今回作成した recipe.php count.php count.txt を「ZIP圧縮フォルダ」機能を使って圧縮し、moodleにアップロードしてください。

  • もし他にも画像などを使用している場合は、そちらも含めて圧縮してください。

提出期限は、次週の授業日いっぱいまでとします。

圧縮フォルダの作り方が分からない場合はこちらを参考にしてください。

提出時のファイル名は 学生番号 氏名 CGI.zip としてください。

学習支援システム moodle
https://cclms.kyoto-su.ac.jp/

moodleへの課題提出方法が分からない場合は、こちらを参照してください。
moodleに課題をアップロードする方法

以上で今回の作業は終了です。おつかれさまでした。
ウェブページ制作上の知識の一つとして役立てて頂ければ幸いです。

参考

もし京都産業大学のサーバー上にウェブページを作ってみたい場合は、以下の資料が参考になるでしょう。
動的コンテンツ利用の手引き(京都産業大学)

PHPに興味がわきましたか? もしPHPでプログラミングをしてみたい場合は、解説サイトを検索して紹介されているコードを真似してみたり、初心者向けの解説本を書店で買い求めると良いでしょう。PHP製のCGIを配布しているサイトも参考になると思います。

PHPの詳しい書き方については、PHPの公式が提供するオンラインマニュアルがよくできているので、参考にすると良いでしょう。具体的なサンプルコードなども多数掲載されていて、とても分かりやすいです。
公式PHPマニュアル

次回予告

次回はより大規模で高度なCGIを動かす演習を行います。
といっても設置自体はそれほど難しくないので、きっと何とかなるかと思います。
お楽しみに!😁

おまけ

htdocs フォルダ内の index.html に、今回紹介したCGIへのリンクを掲載しておくと、簡単にアクセスできるようになるのでおすすめです。

<!DOCTYPE html>
<html lang="ja">

<head>
<meta charset="UTF-8">
<title>基礎実習の課題ページ</title>
</head>
 
<body bgcolor="wheat" text="#444444">
<!-- 本文ここから -->

<table border="1" cellpadding="16" cellspacing="0" bgcolor="white" width="80%" align="center">
<tr><td>

<h1>コンピュータ基礎実習(上級)課題のページ</h1>

<p>ここにはコンピュータ基礎実習で作成した課題を掲載しておきます。</p>

<h2>課題</h2>

<p><a href="jikosyokai.html" target="_blank">自己紹介ページはこちら</a></p>
<p><a href="recipe.php" target="_blank">ゴブリン・シチューのレシピ</a></p>拡張子を.phpに変更

<p><a href="gousei.pdn" target="_blank">合成写真</a><br>
<a href="button.pdn" target="_blank">ボタン画像</a></p>

<p><a href="trend/">私の○○サイト</a></p>

<p><a href="bbs/pppbbs.php" target="_blank">掲示板CGI</a><br>各種CGIページへのリンクを追加
<a href="calendar/" target="_blank">カレンダーCGI</a></p>


<h2>リンク集</h2>

<p><a href="https://www.cc.kyoto-su.ac.jp/~shimizu/" target="_blank">基礎実習のページ</a> <a href="https://cclms.kyoto-su.ac.jp/" target="_blank">moodle</a></p>

<p><a href="https://www.kyoto-su.ac.jp/entrance/index-ksu.html" target="_blank">学内TOP</a></p>

</td></tr>
</table>

<!-- 本文ここまで -->
</body>
</html>
index.php に今回紹介したCGIを掲載してみた例

戻る

1)
CGIの動作速度は、PHPのほうが速いと言われていたり、逆にPerlのほうが速くなったりと、抜きつ抜かれつの関係にあります。
2)
権限を設定するにはアップロードアプリを使って、サーバー上のファイルを「右クリック」→「権限(パーミッション)」といった項目を選択して設定できる場合が多いです。
3)
もちろん <body></body> の範囲内のどこかです。
4)
include()は、現在の位置に別のファイルを読み込んで実行させるという意味の命令です。ここでは count.php を読み込ませています。
jyokyu/j08.txt · 最終更新: 2025/06/02 16:57 by 127.0.0.1