と、めずらしく2日続けて遊ぼうシリーズ。 何を隠そう、すでに5回目。 いつも、書き始めるんですが脱線してなかなかプログラムのことまでたどり着けません。 😛
なにやら難しそうなサブタイトルがついていますが、なんのことはありません。 でも意外と入門書には書いていない事実。 今回は PHP というより若干 Web プログラミングよりのお話です。
PHP で書かれたプログラムの多くは、拡張子 .php となっているただのテキストファイルです。 これをそれなりに設定された Web サーバ上において、ブラウザからそのファイルに対してアクセスを行うと動作するといのは、なんとなく分かるかと思います。
じゃー、そのプログラムはどこから始まって、いつ終わるの?というのがエントリポイントと生存期間です。
まずはどこから始まる(エントリポイント)かというお話ですが、これは”そのファイルの先頭”から実行がはじまります。 そして、”1行(文)”づつ基本的に上から下に向かって解釈しながら走行し、ファイルの終端、もしくは exit や die といった構文でプログラム中で明示的に終了を命令されたときに終了します。(ちなみにこういった、ファイルの先頭から実行が始まる言語はエントリポイントが”ない”言語というそうです。 ファイルの先頭からはじまらず、ある特定のキーワードの部分からはじまる言語も多数あります。)
ちょうど人間が、文章を読み進めるがごとく、PHP も指令が書かれた文書を上から下に読み進めるイメージです。 若干違うのは、上から下に進んでいるときに、上にもどったり別の文書(ファイル)を読みに行ったりすることです。
Web / PHP の場合、その読み進めていく課程で行ったなにかしらのの”出力”結果が、ブラウザにそのプラグラムの動作として表示されます。 ブラウザは HTML を解釈して画面を表示するソフトウェアですので、一般的に PHP の出力結果は HTML になります。
ということで、HTML の出力をおえると PHP のプログラムはその役目を終えます。 なので、その生存期間は1秒やそこらです。 WP だと 3~5 秒くらいですか。
ポイントは、次のアクセスは、たとえ同じプログラムでも、さっきうごいていたプログラムとはなんら関係がないということです。 動作中に処理された値などは、終了と同時になくなります。 残るのは、ブラウザに表示された結果だけです。 ブラウザに表示された結果はユーザが消さない限りのこりますので、ユーザの手元には見えますが PHP 的には、生存期間がおわったものはすべて無かったことになります。
それでは、なぜ WP なんかが投稿したエントリを覚えていれるかというと、WP のプログラムはその実行結果を忘れないように MySQL というデータベースに保存するためです。 シンプルな掲示板のシステムなどはファイルにデータを書き出すことも良くやります。 このように生存期間の短い Web / PHP のプログラムでデータを保存したい場合は、ディスクなどの外部記憶を使う必要があります。
さて Web / PHP で永遠に動き続けるプログラムがかけないかというと、そういうわけでもありません。 そういったプログラムにブラウザでアクセスした場合は、ブラウザの地球儀がぐるぐる回り続けそのプログラムは動き続けます。 ただしHTML の出力においてこういった永遠に動き続ける動作をしたところで意味はありませんし、また想定されていないため、ブラウザのタイムアウトや PHP 自身によりこういったプログラムは強制的に落とされます。
この辺が、Web のプログラムになれていない人には分かりづらいとこですね。(職業でコンピュータやっている人でも、Web に携わってないと分からない人が多い)
一般の Windows などのPCで動作するクライアントのソフトウェアは、画面がみえているうちは生存しています。 操作が無くてもプログラムは同じところをぐるぐるぐるぐる動き続け、ユーザからの入力などを待ち動き続けます。 終了はユーザが明示的に終了の操作をしたときや、OS からの指令がきたときです。 なのでこのときまでデータなどは、外部記憶に頼ることなく保存されているわけです。
こういった生存期間が長いクライアントソフトウェアは C++ や C# でかかれることが多いわけですが、同じプログラミング言語ですから PHP だってかけないことはありません。 PHP は Web で使われることを想定していますので、標準で Windows の画面にウインドウをだしたりはできませんが、ライブラリと呼ばれる拡張をつかえば、生存期間がながいぐるぐるぐるぐる動き続けるクライアントソフトを作ることも可能です。 こういった意味合いで区別するため上では「Web / PHP 」といった書き方をしてみました。
また、逆に Web 系のシステムでここでいう生存期間が長いソフトウェアをつくれないかというとそうでもなく、Java 言語などでは、一般的にアプリケーションサーバと呼ばれる仕組みをつかいアプリケーションをサーバ上で生存させ続けることもできます。
また話が脱線してしまいましたが、、Web / PHP に関してはまずは次のように覚えておけば間違いありません。
せっかくですので、我らが WP のスタートポイントを書きます。 ブログルートにある、index.php です。 上から気合いで読み続けていけば、そのうち終わります。 それがファイルの終端だったか、exit だったかは忘れました。 😛