PHPの歴史

PHP Tools、FI、Construction Kit、そして PHP/FI

現在 PHP として知られているものは、かつて PHP/FI と呼ばれていたソフトウェアの後継です。 1994 年に Rasmus Lerdorf が生み出したいちばん最初の PHP はシンプルな CGI バイナリ群で、C 言語で書かれていました。 元々は彼がオンラインで公開している経歴書のアクセス履歴を調べるために使われていましたが、 彼はそのスクリプト群を「Personal Home Page Tools」と名付けました。「PHP Tools」 と略されることが多かったようです。時を経て、さまざまな機能追加の要望が出てきたところで、 Rasmus は PHP Tools を書き直しました。より大規模でリッチな実装にしたのです。 このニューモデルはデータベースも扱えるようになり、 一種のフレームワークとして使えるようになったのです。 ユーザーは、これを使って掲示板のようなシンプルな動的ウェブアプリケーションを作れるようになりました。 1995 年 6 月、Rasmus は PHP Tools のソースコードを » 公開 しました。開発者は、それを自分の好きなように使えるようになったのです。 ユーザーが自分でバグ修正や機能改善をすることも許可されていましたし、 むしろそれを推奨していました。

同じ年の 9 月、Rasmus は PHP をさらに発展させ、短期間ですが PHP の看板を外しました。新しいツールの名前は FI ("Forms Interpreter" の略) となり、 この実装には現在の PHP の基本機能のいくつかが含まれていました。 Perl 風の変数、そしてフォーム変数の自動取得、HTML に埋め込める構文などです。 構文は Perl と似ていましたが、より制限されたシンプルなもので、 どこか一貫性に欠けるものでした。 実際、コードを HTML ファイルに埋め込むには HTML のコメントを使う必要がありました。 このやり方を誰もが気に入ったというわけではありませんでしたが、 FI はその後も成長を続け、CGI ツールとしての立場を固めていきました。 とは言え、未だに言語というにはほど遠い状態です。 しかし、翌月の 1995 年 10 月から状況は変わり始めました。 Rasmus が、コードを完全に書き直した版をリリースしたのです。 再び PHP の名前がつき、こんどは「Personal Home Page Construction Kit」 とう名前になりました。これは、当時としてはかなり進んだスクリプトインターフェイスを持っていました。 その言語は意図的に C の構文に似せて作られ、C や Perl などを知っている人たちが移行しやすいようにしてありました。 この時点ではまだ UNIX や POSIX 準拠のシステムにしか対応していませんでしたが、 Windows NT 上での実装も検討されていました。

コードはさらに一から書き直され、1996 年の 4 月には過去のリリースの名前を組み合わせた PHP/FI という名前で公開されました。この第二世代の実装で、 PHP は単なるツール群からプログラミング言語へと進化を遂げたのです。 DBM や mSQL そして Postgres95 などのデータベース、 クッキー、ユーザー定義関数などのサポートが組み込まれました。 その年の 6 月に、PHP/FI のバージョンは 2.0 になりました。 興味深いことに、PHP 2.0 の完全なバージョンとして出されたものはこれだけでした。 最終的にベータ状態を卒業したのは 1997 年 11 月のことでしたが、 そのころには裏にあるパースエンジンは完全に書き直されていました。

開発期間は短かったものの、PHP/FI は初期のウェブ開発業界での勢力を拡大し続けました。 1997 年から 1998 年にかけて、PHP/FI は世界中の数千人のマニアに使われていました。 1998 年 5 月の Netcraft の調査によると、およそ 60,000 のドメインがヘッダに "PHP" の文字を含めていたそうです。これは、そのサーバーに実際に PHP/FI がインストールされていたことを意味します。この数字は、当時のインターネット上の全ドメインの およそ 1% にあたるものでした。 これらの実績にもかかわらず、PHP/FI に円熟期が来ることはとても望めませんでした。 ちょっとした貢献をしてくれる人は何人かいたものの、 基本的には個人で開発している状態が続いていたのです。

例1 PHP/FI のコード例

<!--include /text/header.html-->

<!--getenv HTTP_USER_AGENT-->
<!--ifsubstr $exec_result Mozilla-->
  Hey, you are using Netscape!<p>
<!--endif-->

<!--sql database select * from table where user='$username'-->
<!--ifless $numentries 1-->
  Sorry, that record does not exist<p>
<!--endif exit-->
  Welcome <!--$user-->!<p>
  You have <!--$index:0--> credits left in your account.<p>

<!--include /text/footer.html-->

PHP 3

PHP 3.0 は、現存する PHP に近い状態になった最初のバージョンです。 PHP/FI 2.0 ではまだ力不足で、自分たちが大学のプロジェクトで作っている eコマースアプリケーションを構築するには機能が足りないと気づいたのは イスラエルのテルアビブにいた Andi Gutmans と Zeev Suraski でした。彼らは 1997 年に、 PHP/FI の裏にあるパーサーを新たに書き直そうとし始めました。 Rasmus をオンラインで捕まえた彼らは、PHP の現在の実装や自分たちがそれをどう作り直そうとしているのかについて議論しました。 現在のエンジンを改善させ、既存の PHP/FI のユーザーも守るために、 Andi と Rasmus、そして Zeev は協力して新たなプログラミング言語を作ることにしました。 この全く新しい言語は新しい名前でリリースされました。PHP/FI 2.0 の名前が持っていた「個人向け」というイメージをなくすためにです。 新しい名前は、シンプルに「PHP」。「PHP: Hypertext Preprocessor」 の頭文字をとったものです。

PHP 3.0 の最も強力な点は、その拡張性でした。 さまざまなデータベースやプロトコル、そして API を扱うための成熟したインターフェイスをユーザー向けに用意しただけでなく、 その言語自身も拡張しやすいものにしました。 そのおかげで、多くの開発者がさまざまなモジュールを開発するようになりました。 間違いなく、これこそが PHP 3.0 が大成功を収めた鍵でしょう。 PHP 3.0 で登場したその他の主要機能には、 オブジェクト指向プログラミングのサポートやより強力で一貫性のある言語構文などがあります。

1998 年 6 月、世界中から新たな開発者が多く参入した PHP Development Team は、PHP/FI 2.0 の正式な後継として PHP 3.0 をアナウンスしました。 アクティブな開発が続いていた PHP/FI 2.0 は前年の 11 月に開発が止まっていましたが、 ここで始めて公式に終了宣言が出たのです。約 9 か月の公開テストを経て PHP 3.0 が公式にリリースされたときには、既に世界中の 70,000 以上のドメインに PHP がインストールされていました。さらに、その環境は POSIX 準拠の OS にとどまりませんでした。 比較的少数ではあるものの、PHP がインストールされているとされるドメインの中には Windows 95 や 98 そして NT、あるいは Macintosh でサーバーが動いているところもあったのです。 最盛期には、インターネット上のウェブサーバーのほぼ 10% に PHP 3.0 がインストールされていました。

PHP 4

PHP 3.0が公式にリリースされて間もない1998年の冬、Andi Gutmans とZeev SuraskiはPHPの核となる部分を書き直し始めました。この 目的は、複雑なアプリケーションにおけるパフォーマンスの改善と PHPコードのモジュールとしての独立性を高めることでした。 そういったアプリケーションはPHP 3.0の新機能や第三者による 多くのデータベースやAPIのサポートを使用することで開発可能 でしたが、PHP 3.0はそういった複雑なアプリケーションを効率的に 扱うようにはデザインされていませんでした。

'Zend Engine'と呼ばれる新しいエンジン(開発者であるZeevとAndi の名前の組み合わせ)は、彼らの目的を十分に果たすものでした。 そしてそれは1999年中ごろに初めて紹介されました。このエンジンを 使用し、いくつかの広範囲にわたる新機能を追加したPHP 4.0は 前のバージョンのおよそ2年後となる2000年5月にリリースされました。 PHP 4.0はパフォーマンスが大幅に改善されたのに加え、 さらに多くのウェブサーバーのサポート、HTTPセッション、 出力のバッファリング、ユーザーの入力のさらに安全な取得方法の 提供、いくつかの新しい言語構造の提供といった特徴があります。

PHP 5

PHP 5は長期にわたる開発とプレリリースを経て2004年7月に公開されました。 改良の目玉は、コアである Zend Engine 2.0 で新しいオブジェクトモデルがサポートされたことで、 その他にも多くの新しい機能が追加されています。

PHP の開発チームは数十名の開発者で構成されています。 それ以外にも、何十名もの人たちが関連プロジェクトやサポートなどにかかわっています。 たとえば PEAR や PECL、そしてドキュメンテーション、 さらにはネットワーク基盤の管理などです。 PHP のネットワーク基盤は 100 を軽く上回るウェブサーバーで構成されており、 世界の七大陸のうちの六つにまたがっています。 ここ数年の統計情報に基づいて見積もると、 PHP は今や世界中の何千万から何億ものドメインに導入されていると言っても過言ではありません。

PHP 6

PHP 6 で計画されていたのは、PHP エンジンと言語内で Unicode を強く サポートすることでした。この取り組みは後に破棄されましたが、 PHP 6 をターゲットとしていた機能は PHP 5.3 (名前空間) と PHP 5.4 (トレイト と配列の "短縮" 記法) で取り込まれました。

PHP 7

PHP 7.0 は 2015年にリリースされ、 PHP コアのメジャーバージョン Zend Engine 3.0 を目玉としていました。 このバージョンは大きなパフォーマンスの向上 (PHP 5.6 と比較して最大2倍) とメモリ使用量の効率化、 一貫した64ビットのサポート、例外の機能追加、 安全な乱数生成器、 NULL合体演算子 (??), 無名クラス やその他の機能が含まれていました。

PHP 7 シリーズの後のリリースには、 リストの短縮記法 (7.1) や オブジェクトのパラメータや戻り値への型宣言(7.2)、 柔軟な heredocnowdoc (7.3)、 FFI (7.4) などのような、 多くの言語機能が追加されました。

PHP 8

2020年に最初にリリースされた PHP 8.0 は、 PHP 言語のさらなるメジャーアップデートです。 このバージョンには 名前付き引数, union型 , アトリビュート, コンストラクタのプロモーション, match 式、nullsafe 演算子 (?->), JIT コンパイラが含まれています。 そして、型システムやエラーハンドリングが改善され、一貫性の向上が図られていました。

PHP 8 シリーズの後のリリースには、 enum型 (8.1), ファイバー (8.1), 読み取り専用クラス (8.2), Disjunctive Normal Form (DNF) Types (8.2), クラス定数への型宣言 (8.3) が含まれています。