これを実現しようと思えばやはり「プログラム」が必要です。ただ一言 で「プログラム作ってWEBページで動かす」といっても、大きく次の2つ に分れました。
過去にはクライアント側で Java applet や VBScript が使われていたこともあ りますが、最近はほとんど見なくなりました (JavaScript で十分いろいろなこ とが出来る)。逆に、サーバー側で JavaScript を動かす Node.js というのも あります。後者は、最近では「Webアプリケーション」と呼ばれることが多いも のですが、「サーバ側で動かす」ことにより、サーバー上のデータ(情報) を変化・保存 することが可能となりますので、多彩な応用ができます。 ネット通販に代表されるように、現在のインターネットビジネスは、この技術 無しでは考えられません。サーバー側でプログラムを動かす方法としては、 Java Servletや ASP.NET 等があります。歴史的に、まず最初に実現されたの は CGI (Common Gateway Interface) とSSI (Server Side Include, 仕組みは CGI とほぼ同様なので詳細は略) です。
なぜ歴史的にサーバー側が先か、ということですが、サーバー側で動かす分に はクライアント側(ブラウザ)の変更は必要ないから、という理由が大きかっ たと思われます。圧倒的にクライアント側のほうが数が多く、かつ当時のクラ イアントコンピュータ(パソコン)は計算能力がさほど高くなかったので、ブ ラウザの変更と普及をいきなりするのは結構大変だったと思われます。ちなみに CGI の最初とされる 1993 年当時、前田所有のパソコンのCPUは Intel i486/DX2 66MHz でメモリは 8Mb, ディスクは200Mb 程度 でした。それ でも Linux がちゃんと動いて感動した覚えがあります。
この外部プログラムはそのサーバー上で動くプログラムであればどのような言 語・開発環境でも良いです。とはいえ、初期の CGI では perl が最も一般的で した。それは、perl の特徴が CGI の要求によくマッチしていたからです。す なわち、
しかし、今では、perl でごりごり書くのは流行らなくて、PHP/Python/Ruby で 書き、さらに言うと、スクラッチから書くのではなくアプリケーションフレー ムワーク使って開発、というものが大規模サイトでも主流となっているようで す(ここでは詳細は略)。
この外部プログラムを起動する、ということは、サーバ自身を改造するこ となくサーバサイドプログラミングを実現するという意味では意義があっ たのですが、実はこれはサーバマシンにとって重い(CPU,メモリを消 費する)処理で、CGI が発明された時から(同時に多数のアクセス をうけた場合パフォーマンスが低下したり、ひどい場合にはサービスが停 止する等の)問題がありました。そこで、WWW サーバから別のプログラム を呼び出すのではなく、サーバの一部としてプログラムを動かしたいとい う要求が出て来ました。サーバでもクライアントでもどちらで動かして もいい場合はクライアント側での JavaScript などで対応できますが、ネッ ト通販、ブログ等の永続的(セッションを切ってもサーバー側に保存 される)データ処理等はどうしてもサーバ側での処理じゃないと、 構造的に実現不可能です。
そこで発明されたのが PHP です。PHPは、Webサーバソフト (Apache etc.) の モジュール として動作する、スクリプト言語を実行 する環境です。
ちなみに PHPの生い立ちを簡単になぞると…モジュール とは、プログラムに後で組み込んで機能を拡張す る仕組みのことです。つまりHTML文書中に記述されたスクリプトを apache に モジュール として組み込まれた PHP エンジン(インター プリタ)が実行し、結果を HTMLデータとしてWebブラウザに出力する仕 組みです。
1994年秋、Rasmus Lerdorf(グリーンランド生まれのデンマーク育ち)が自分 の履歴書ページの閲覧者を調べるために作っていた Perl スクリプト 「Personal Home Page Tools」 を C言語で書き直し、HTMLフォームを扱える動 的な Webアプリケーションのための機能 「Form Interpreter」 に拡張したの が始まりとされ、その頭文字をとって、「PHP/FI」と呼ばれました。 Lerdorf はこのソフトウエアの開発に誰でも参加できるようにしていたこと、 つまりオープン・ソースとしたことで大勢の開発者の支持を得ました。その後、 PHP開発の主体は個人からグループへ変化し、やがて、C、Perl 等の仕様まで取 り入れるように拡張され、技術者にとって非常に取り組みやすい言語として発 展ました。現在では、PHPは「PHP is Hypertext Pre-processer」 の 略ということになっています。
ちなみに最近の apache では、perl, python 等もモジュールとして動く仕組 みができていますので、昔ほど負荷は高くないようです。が、それでも php の軽さにはかなわないようです。あと、perl に関しては仕様の複雑さ(同じ 処理をいろんな書き方で書けるので、他人が書いたコードが読み辛い)も近年 避けられてる要因の1つです。
PHPが利用されている理由を整理すると以下のようになるかと思います。
とはいえ直近で言うと、php はセキュリティ的に潜在的な弱さがある(php 自 体というわけではないが、つい脆弱なプログラムを書いてしまう可能性がある) ので、人気は翳りをみせています。
$ cd public_html $ nano phpinfo.php($ はプロンプトなので、赤字のところだけ入力する)して nano エディタ を開き、
<?php phpinfo(); ?>を入力して、^X で保存して終了します。
http://liweb.hannan-u.ac.jp/~giXXXXX/phpinfo.php
(giXXXXX は各自のユーザ名)で(サーバプログラム経由で!)アク セスすれば、php に関するいろいろな情報がえられます。これは実際インストー ル後のテストの定番です。【超重要!!】
「サーバプログラム経由で」のアクセスが本質です。つまりWindows のファイル操作として ローカルに phpinfo.php を作ってダブルクリック しただけでは駄目(!) で、HTTP により WWW サーバプログラムである apache (のmod_phpモジュール)が動くようにアクセスしないと phpエン ジンは動きようがない =プログラムは動作しない、です。JavaScript は ブラウザ側に処理エンジン(インタープリタ)があ る ので、javascript-sample.html を Edge等で開くだけで動かすことが 出来るわけです。この違いを是非理解してください(過去の受講生でこれを全 く理解出来てない人が少なからずいました…)
<html> <head> <title> PHP examples </title> </head> <body> <?php $var1 = 10; $var2 = 2; print "var1: $var1, var2: $var2 <p> " ; print "var1 + var2= "; print $var1 + $var2 ; print "<br>" ; print "var1 - var2= "; print $var1 - $var2 ; print "<br>" ; print "var1 * var2= "; print $var1 * $var2 ; print "<br>" ; print "var1 / var2= "; print $var1 / $var2 ; print "<br>" ; if ($var1 == 1) { print "var1 is one\n"; } else { print "var1 is not one\n"; } print "<p>" ; while ($var1 > 0) { print "Now var1 is $var1.<br>" ; $var1 -= 1; } ?> </body> </html>
最近の環境では、とりあえず UTF-8 にしておけばなんとかなる可能性が大です。あと、<form>タグのmethod属性を「GET」から「POST」に変更する場合 は、「$_POST["name属性"]」を使用します。GETメソッドでは送信できるデー タの大きさに限界がありますし、またデータ内容を URL の一部として簡単に 盗み見ることができるため、多くの場合は POSTメソッドが使用されるます。 しかし逆に、検索結果まで URL として他人に教えたい場合は GET も使われる ということも、ここで再確認しておいてください。 ちなみに $_POSTや$_GETはスーパーグローバル変数と呼ばれ、PHPであらかじ め用意された連想配列(配列のインデックスとして数字ではなく文字列で指定 できるもの)です。ちなみに、ほかにもPOSTとGETどちらにも対応する 「$_REQUEST["name属性"]」があります。