PHP

この記事を聞く
PHP
パラダイムマルチパラダイム命令型関数型オブジェクト指向手続き型リフレクション型
デザイン:ラスムス・ラードルフ
開発者PHP 開発チーム Zend Technologies PHP Foundation
初登場1995年6月8日[ 1 ] [ 2 ] (1995年6月8日
安定版リリース
8.5.2 [ 3 ] ウィキデータで編集する / 2026年1月15日 (2026年1月15日
タイピングの規律動的弱い漸進的[ 4 ]
実装言語C(主に、一部のコンポーネントはC++
OSUnix ライクWindowsmacOSIBM iOpenVMSIBM Z
ライセンスPHPライセンス[ a ]
ファイル名拡張子.php、、、、、.phar.phtml.pht.phps
Webサイトphp.net
主要な実装
Zend EngineHHVMPeachPieQuercusParrot
影響を受けた
PerlCC++Java[ 6 ] 、 Tcl[ 2 ]、JavaScript [ 7 ]
影響を受けた
ハックJSPASPReact JS

PHPは、 Web開発向けの汎用スクリプト言語です。[ 8 ] 1993年にデンマーク系カナダ人のプログラマー、ラスムス・ラードルフによって作成され、1995年にリリースされました。 [ 9 ] [ 10 ] PHPのリファレンス実装は現在、PHPグループによって作成されています。[ 11 ] PHPはもともとPersonal Home Pageの略語でしたが、[ 12 ] [ 13 ]現在では再帰的な頭字語であるPHP: Hypertext Preprocessorを表しています。[ 14 ]

PHP コードは通常、モジュールデーモン、またはCommon Gateway Interface (CGI) 実行可能ファイルとして実装されたPHPインタープリタによってWeb サーバー上で処理されます。Web サーバーでは、解釈および実行された PHP コードの結果 (生成されたHTMLバイナリ画像データなど、任意のタイプのデータ) が、 HTTP応答の全体または一部を形成できます。さまざまなWeb テンプレート システム、Webコンテンツ管理システム、およびWeb フレームワークが存在し、それらを使用して、その応答の生成を調整または容易にすることができます。さらに、PHP は Web コンテキストの外部のプログラミング タスクにも使用できますが、Web 以外の用途での使用はまれです。PHP コードは、コマンド ラインから直接実行することもできます。

Zend Engineを搭載した標準PHPインタープリタは、 PHPライセンスの下でリリースされたフリーソフトウェアです。PHPは広く移植されており、様々なオペレーティングシステムやプラットフォーム上のほとんどのウェブサーバーに導入できます。[ 15 ]

歴史

PHP 言語は当初、正式な仕様や標準が文書化されることなく発展し、オリジナルの実装が事実上の標準として機能し、他の実装がそれに追随することを目指しました。

初期の歴史(1993年から1997年)

PHPの開発は1993年[ 9 ]に始まり、ラスマス・ラードルフがC言語でCommon Gateway Interface(CGI)プログラムをいくつか作成しました[ 16 ] [ 17 ] 。彼はこれらのプログラムを用いて個人ホームページを管理していました。彼はこれらのプログラムHTMLフォームに対応させ、データベースと通信できるように拡張し、この実装を「Personal Home Page/Forms Interpreter」(PHP/FI)と名付けました。

初期のPHP構文の例: [ 18 ]

<!--include /text/header.html--><!--getenv HTTP_USER_AGENT--> <!--if substr $exec_result Mozilla--> こんにちは、Netscape をお使いですね! < p > <!--endif--><!--sql database select * from table where user='$username'--> <!--ifless $numentries 1--> 申し訳ございませんが、そのレコードは存在しません< p > <!--endif exit--> ようこそ<!--$user--> ! < p >アカウントに は<!--$index:0-->クレジットが残っています。 < p ><!--include /text/footer.html-->

PHP/FIは、シンプルで動的なウェブアプリケーションの構築に使用できます。バグ報告の迅速化とコードの改善のため、ラードルフは1995年6月8日にUsenetのディスカッショングループcomp.infosystems.www.authoring.cgiで、PHP/FIのリリースを「Personal Home Page Tools (PHP Tools) version 1.0」として最初に発表しました。 [ 1 ] [ 19 ]このリリースには、 Perl風の変数、フォーム処理、 HTML埋め込み機能などの基本機能が含まれていました。この時点で、構文はPerlに似たものに変更されていましたが、より単純で制限が多く、一貫性も低くなっていました。[ 12 ] [ 11 ]

初期のPHPは、新しいプログラミング言語として意図されたものではなく、むしろ有機的に成長していきました。ラードルフは当時を振り返ってこう述べています。「PHPの成長を止める術はありません。[...] プログラミング言語を書くつもりは全くありませんでした。[...] プログラミング言語の書き方は全く分かりません。[...] ただ、論​​理的に次の段階を着実に追いかけていっただけです。」[ 20 ]開発チームが結成され、数ヶ月にわたる作業とベータテストを経て、1997年11月にPHP/FI 2が正式にリリースされました。[ 21 ]

PHPは元々設計されたものではなく、有機的に開発されたため、関数の命名やパラメータの順序に一貫性がありませんでした。[ 22 ]関数名はPHPが「ラップ」している低レベルライブラリに合わせて選ばれることもありました。[ 23 ]また、PHPの初期のいくつかのバージョンでは、関数名の長さがハッシュ関数として内部的に使用されていたため、ハッシュ値の分散を改善するために名前が選ばれました。[ 24 ]

PHP 3 および 4 (1998 年から 2004 年)

これは、 WordPressコンテンツ管理システムの PHP コードの例です。

1997年にZeev SuraskiAndi Gutmansはパーサーを書き直してPHP 3の基礎を築き、言語名を再帰的な頭字語PHP: Hypertext Preprocessorに変更した。[ 11 ] [ 25 ]その後、PHP 3の公開テストが開始され、1998年6月に正式リリースされた。SuraskiとGutmansはPHPのコア部分の書き直しを開始し、1999年にZend Engineを開発した。 [ 26 ]彼らはまた、イスラエルのラマトガンZend Technologiesを設立した。[ 11 ]

2000年5月22日、Zend Engine 1.0を搭載したPHP 4.0がリリースされました。[ 11 ] 2008年8月までに、このブランチはバージョン4.4.9に達しました。PHP 4は現在開発が終了しており、セキュリティアップデートのリリースも予定されていません。[ 27 ] [ 28 ]

初期の PHP 5 (2004 年から 2006 年)

2004年7月1日、新しいZend Engine 2.0を搭載したPHP 5.0がリリースされました。[ 11 ] PHP 5.0では言語に大きな変更が加えられ、特にオブジェクト指向プログラミングへのアプローチの見直し、イテレータと例外が導入されました。[ 29 ]

PHP 5.1 と PHP 5.2 は翌年にリリースされ、PHP Data Objects (PDO) 拡張機能 (データベースにアクセスするための軽量で一貫性のあるインターフェイスを定義する) などの小さな改善と新機能が追加されました。2008 年には、PHP 5.x が開発中の唯一の安定したバージョンになりました。

多くの著名なオープンソースプロジェクトは、PHP 4からPHP 5への移行を推進するPHP開発者のコ​​ンソーシアムによって提供されたGoPHP5イニシアチブ[ 30 ]により、2008年2月5日から新しいコードでPHP 4のサポートを停止しました。[ 31 ] [ 32 ]

PHP 6とUnicode

PHPのネイティブ文字列関数は生のバイト列に対してのみ動作し、マルチバイト文字エンコーディングでの使用は困難でした。[ 33 ] [ 34 ] 2005年に、Andrei Zmievskiが率いるプロジェクトが開始され、PHP全体にネイティブUnicodeサポートが導入されました。これは、 International Components for Unicode (ICU)ライブラリを埋め込み、テキスト文字列を内部的にUTF-16として表現することでした。[ 35 ]これにより、言語内部とユーザーコードの両方に大きな変更が生じるため、当時開発中だった他の主要な機能とともに、これを言語バージョン6.0としてリリースすることが計画されました。[ 36 ]

しかし、必要な変更を理解している開発者が不足していることと、ウェブのコンテキストではほとんど使用されない UTF-16 との間の変換によって生じるパフォーマンスの問題により、プロジェクトは遅延しました。[ 37 ]その結果、2009年に PHP 5.3 リリースが作成され、2010年3月に現在の形式のプロジェクトは正式に放棄され、PHP 6 から残っている非 Unicode 機能のほとんどを含む PHP 5.4 リリースが準備されました。[ 38 ]当初は Unicode 統合のための新しい計画が形成されることを期待していましたが、2014年までに何も採用されませんでした。

PHP 5 以降 (2009 年から 2014 年)

PHP 5.3は、もともと6.0の一部となることを意図していた機能を含んでいたため、名前空間クロージャ遅延静的バインディングのサポートが追加され、[ 39 ] [ 40 ]、標準関数に対する多くの修正と改善が行われた重要なリリースでした。

Unicodeブランチが正式に廃止されたことに伴い、2011年に新しいリリースプロセスが採用され、年間リリースサイクルが計画され、「機能リリース」(xyzからx.y+1.z)と「メジャーリリース」(xyzからx+1.0.0)が明確に区別されました。[ 41 ] 6.0リリースに予定されていた残りの機能は、トレイトサポートや新しい「短い配列構文」など、2012年3月にリリースされたPHP 5.4に含まれていました。その後、PHP 5.5(2013年6月)と5.6(2014年8月)でさらに段階的な変更が行われました。

PHPバージョン5.3および5.4では、Microsoft Windowsバイナリ配布版は32ビット版IA-32ビルドのみであり、[ 42 ] [ 43 ] 、64ビット版Windowsプラットフォームでインターネットインフォメーションサービス(IIS)を使用するにはWindows 32ビット互換モードが必要でした。PHPバージョン5.5では、Microsoft Windowsで64ビット版x86-64ビルドが利用可能になりました。[ 44 ]

PHP 5.6の公式セキュリティサポートは2018年12月31日に終了しました。[ 45 ]

PHP 7.x (2015年から2019年)

2014年から2015年にかけて、PHPの新しいメジャーバージョンであるPHP 7.0が開発されました。このバージョンの番号付けについては、社内開発者の間で議論がありました。[ 46 ] PHP 6のUnicode実験はまだリリースされていませんでしたが、いくつかの記事や書籍のタイトルでPHP 6の名前が参照されており、新しいリリースでその名前を再利用すると混乱が生じる可能性がありました。[ 47 ]投票の結果、PHP 7という名前が選ばれました。[ 48 ]

PHP 7.0の基礎は、当初PHP次世代phpng )と呼ばれていたPHPブランチでした。これはDmitry Stogov、Xinchen Hui、Nikita Popovによって書かれ、[ 49 ] Zend EngineをリファクタリングすることでPHPのパフォーマンスを最適化することを目指し、ほぼ完全な言語互換性を維持しました。[ 50 ] 2014年7月14日までに、 phpngプロジェクトのメインベンチマークスイートとして機能したWordPressベースのベンチマークは、ほぼ100%のパフォーマンス向上を示しました。phpngからの変更は、よりコンパクトなデータ構造などの変更がジャストインタイム JIT)コンパイラへの移行に適していると考えられるため、将来のバージョンでのパフォーマンス向上を容易にします。[ 51 ]大幅な変更があったため、改良されたZend Engineは、PHP 5.xで使用されていたZend Engine 2の後継として、Zend Engine 3と呼ばれました。[ 52 ]

PHP 7.0には、2011年に合意されたバージョン管理方式で「メジャーバージョン」に許可されている下位互換性のない変更も含まれていました。 [ 41 ]コア言語の変更には、変数の逆参照のより一貫した処理、[ 53 ]foreachステートメントのより予測可能な動作、[ 54 ]ビットシフトのプラットフォーム一貫性[ 55 ]および浮動小数点から整数への変換が含まれていました。[ 55 ] [ 56 ]メンテナンスされていない、または非推奨のサーバーアプリケーションプログラミングインターフェース(SAPI)と拡張機能がPHPコアから削除されました。最も顕著なのはレガシーmysql拡張機能です。[ 57 ]<% ASPスタイルの区切り文字や%>などの他のレガシー機能も削除されました<script language="php"> ... </script>[ 58 ]

PHP 7.0は、PHPの型システムの拡張の始まりとなりました。PHP 5.xでは関数のパラメータのみに型宣言が可能でしたが、7.0では関数の戻り値に拡張されました。[ 59 ]また、7.4ではオブジェクトのプロパティにも拡張されました。 [ 60 ]表現可能な型も拡張され、7.0ではスカラー型(整数、浮動小数点数、文字列、ブール値)が、 [ 61 ]iterable型、[ 62 ] null許容型、[ 63 ]戻りvoid値型[ 64 ]はすべて7.1で、 7.2では型が[ 65 ]objectになりました。

この時期の他の変更は、言語の表現力を高めることを目的としており、7.0では??( null合体) [ 66 ]<=>「宇宙船」3者間比較[ 67 ]演算子、PHP 7.1では配列の逆参照[ 68 ]や複数の例外タイプのキャッチ[ 69 ]のための新しい構文、7.3ではより柔軟なヒアドキュメントとナウドキュメント構文[ 70 ]、7.4ではヌル合体代入演算子[ 71 ]が導入されました。

PHP 8.x (2020年以降)

PHP 8.0は、以前のバージョンから大幅な変更が加えられたメジャーバージョンとして、2020年11月26日にリリースされました。 [ 72 ] [ 73 ]

最も注目を集めた変更点の1つは、 JITコンパイラの追加です。これにより、いくつかのユースケースで大幅なパフォーマンスの向上が期待できます。[ 74 ] [ 75 ]一般的なウェブ開発のユースケースよりも、数学的な操作で大幅な改善が期待できます。[ 76 ]さらに、JITコンパイラのパフォーマンス上の利点により、一部のコードをCからPHPに移行する可能性が生まれます。[ 77 ]

8.0で言語に追加された重要な機能は属性で、クラス、メソッド、パラメータなどのプログラム要素にメタデータを追加することができます。[ 72 ]その後のバージョンでは、言語の動作を変更する組み込み属性が追加されました。たとえば、PHP 8.2の属性、[ 78 ] PHP 8.3の属性、[ 79 ] PHP 8.4の属性、[ 80 ] PHP 8.5の属性と属性などです。 [ 81 ] [ 82 ] [ 83 ]#[\SensitiveParameter]#[\Override]#[\Deprecated]#[\NoDiscard]#[\DelayedTargetValidation]

言語の型システムの重要な拡張は、複合型の追加です。PHP 8.0 の共用体型(例:「整数または文字列」を意味する)、[ 84 ] PHP 8.1 の交差型(例:「値は との両方のインターフェースを実装する必要がある」を意味する)、[ 85 ] PHP 8.2 の選言正規形(DNF)型( などの交差の共用体)[ 86 ]追加の特殊型キーワードが追加されました。PHP 8.0 の および、[ 72 ] PHP 8.1 の(関数が決して返さないことを示すボトム型) [ 87 ] PHP 8.2 では、、、 がスタンドアロン型として追加されました。[ 88 ] [ 89 ]int|stringTraversable&CountableTraversableCountablearray|(Traversable&Countable)mixedstaticnevernullfalsetrue

豊富な型システムの追加は、より厳密な言語への一般的な傾向の一部であり、PHP 8.0では、文字列と数値の比較、[ 90 ]、数値文字列、[ 91 ] 、および互換性のないメソッドシグネチャ[ 92 ]の処理に重大な変更が含まれていました。それ以降のバージョンでは、将来のメジャーバージョンで重大な変更として計画されている動作、たとえばnullnull可能でない内部関数パラメータへの渡し[ 93 ]や、クラスで宣言されていないプロパティの参照[ 94 ]などについて、非推奨の通知が導入されました。

リリース履歴

2011年6月28日より、PHP開発チームはPHPの新バージョンリリースのタイムラインを導入しました。[ 41 ]このシステムでは、少なくとも毎月1回のリリースを実施します。年に1回、新機能を含むマイナーリリースを実施します。すべてのマイナーリリースは、セキュリティとバグ修正を含む少なくとも2年間のサポートを受け、その後少なくとも1年間はセキュリティ修正のみを実施します。つまり、マイナーリリースごとに合計3年間のリリースプロセスとなります。この3年間のリリースプロセスでは、小規模で自己完結的な機能を除き、マイナーリリースに新機能を導入することはできません。2024年のRFCでは、セキュリティ修正のみの期間が2年間に延長され、すべてのサポート終了日が12月31日に固定され、「小規模で自己完結的な」機能をパッチバージョンに導入できるという例外が削除されました。[ 192 ]

古いバージョンの蔓延

W3Techsは、2025年11月現在(PHP 7が廃止されてから約3年後、PHP 8.3がリリースされてから23か月後)、PHP 7などのサポートされていないバージョンが、PHPウェブサイトの半分以上でまだ使用されており、古くて安全でないことがわかっていると報告しています。[ 193 ] [ 194 ]これには、20年以上前にリリースされた、さらに古く(7年前に廃止された)安全でないPHP 5を使用しているPHPウェブサイトの9.7%が含まれていました。

マスコット

PHPのマスコット、elePHPant

PHPプロジェクトのマスコットは、 PHPのロゴが横についた青い象のelePHPantで、 1998年にヴィンセント・ポンティエ[ 195 ]によってデザインされました。 [ 196 ]「(PHPの)文字は横から見ると象の形をしています。」[ 197 ]

elePHPantはぬいぐるみの形態では色が異なる場合があります。[ 198 ]このマスコットは長年にわたり様々なバリエーションが作られてきました。コミュニティでは、Vincent Pontierによるオリジナルデザインに基づいたelePHPantのみが公式とみなされています。[ 199 ]これらはコレクター向けであり、中には非常に希少なものも存在します。[ 200 ]

構文

組み込み開発サーバー上で動作する PHP 7.4 の「Hello, World」アプリケーション

次の「Hello, World!」プログラムは、 HTMLドキュメントに埋め込まれた PHP コードで記述されています。

<!DOCTYPE html> < html > < head > < title > PHP "Hello, World!" プログラム</ title > </ head > < body > < p > <? = 'Hello, World!' ?> </ p > </ body > </ html >

PHPインタプリタは、区切り文字で囲まれたPHPコードのみを実行します。区切り文字の外側にあるものはPHPでは処理されませんが、PHP以外のテキストはPHPコードに記述された制御構造の影響を受ける可能性があります。最も一般的な区切り文字は、 PHPセクションの<?php開始と?>終了に使用されます。短縮形<?も存在します。この短い区切り文字を使用すると、ローカルのPHP設定でサポートが無効にされる可能性があるため、スクリプトファイルの移植性が低下し、推奨されません。[ 201 ] [ 202 ]逆に、短いechoタグを使用しないという推奨事項はありません<?=[ 203 ] PHP 5.4.0より前では、この短い構文は設定が有効になっている場合にechoのみ機能しますshort_open_tagが、PHP 5.4.0以降では常に使用できます。[ 204 ] [ 205 ] [ 201 ]これらの区切り文字の目的は、PHPコードをJavaScriptコードやHTMLマークアップなどのPHP以外のコンテンツから分離することです。[ 206 ]

XHTMLやその他のXML文書における最初の形式の区切り文字<?phpと<code>は、正しく形成されたXML処理命令を作成します。 [ 207 ]つまり、サーバー側ファイル内のPHPコードとその他のマークアップの組み合わせは、それ自体が整形式のXMLになります。 ?>

変数にはドル記号が先頭に付き、事前にを指定する必要はありません。PHP 5では型宣言が導入され、関数の引数を特定のクラスのオブジェクト、配列、インターフェース、またはコールバック関数に強制できるようになりました。ただし、PHP 7より前では、整数や文字列などのスカラー型では型宣言を使用できませんでした。[ 61 ]

以下は、PHP 変数を宣言して初期化する方法の例です。

<?php $name = 'John' ; // 文字列型の変数を宣言および初期化中$age = 18 ; // 整数型の変数を宣言および初期化中$height = 5.3 ; // double 型の変数を宣言および初期化中echo $name . ' is ' . $height . "m tall \n " ; // 変数と文字列を連結中echo " $name is $age years old." ; // 変数を文字列に挿入中?>

関数名やクラス名とは異なり、変数名は大文字と小文字が区別されます。二重引用符("")で囲まれた文字列とヒアドキュメント文字列はどちらも、変数の値を文字列に挿入する機能を提供します。[ 208 ] PHPは自由形式言語と同様に改行を空白文字として扱い、文はセミコロンで終了します。[ 209 ] PHPには3種類のコメント構文があります。ブロックコメントとインラインコメントを示します。またはは1行コメントに使用されます。[ 210 ]文は、PHPがテキスト出力に提供するいくつかの機能の1つです。 /* *///#echo

キーワードと言語構文の点では、PHP は C スタイルの構文に似ています。if条件、forループwhile、関数の戻り値は、C、C++、C#、Java、Perl などの言語の構文に似ています。

データ型

PHPは緩い型付けです。整数はプラットフォーム依存の範囲で、C言語のlong型に相当する32ビット、64ビット、または128ビットの符号付き整数として格納されます。符号なし整数は特定の状況下で符号付き値に変換されますが、これは他の多くのプログラミング言語とは異なる動作です。[ 211 ]整数変数は、10進数(正と負)、 8進数16進数、および2進数表記を使用して代入できます。[ 212 ]

浮動小数点数もプラットフォーム固有の範囲に格納されます。浮動小数点表記法、または2種類の科学的記法を使用して指定できます。[ 213 ] PHPには、 JavaC++のネイティブブール型に類似したネイティブブール型があります。ブール型の変換規則を使用すると、 PerlやC++と同様に、ゼロ以外の値はtrue、ゼロはfalseとして解釈されます。[ 213 ]

NULLデータ型は値を持たない変数を表します。NULLこのデータ型で許可される唯一の値です。[ 213 ]

「リソース」型の変数は、外部ソースからのリソースへの参照を表します。これらは通常、特定の拡張機能の関数によって作成され、同じ拡張機能の関数によってのみ処理されます。例としては、ファイル、画像、データベースリソースなどが挙げられます。[ 213 ]

配列には、リソース、オブジェクト、さらには他の配列など、PHPが扱えるあらゆる型の要素を含めることができます。値のリストや、キーと値の両方を持つハッシュでは順序が保持され、これらを混在させることもできます。[ 213 ] PHPは文字列もサポートしており、一重引用符、二重引用符、nowdoc、またはheredoc構文で使用できます。[ 214 ]

標準PHPライブラリ(SPL)は標準的な問題を解決し、効率的なデータアクセスインターフェースとクラスを実装します。[ 215 ]

機能

PHPはコア言語で膨大な数の関数を定義しており、その多くは様々な拡張機能でも利用可能です。これらの関数についてはオンラインのPHPドキュメントで詳しく説明されています。[ 216 ]しかし、組み込みライブラリには、上記の履歴で説明したように、さまざまな命名規則とそれに伴う矛盾点があります。

カスタム関数は開発者によって定義できます。

function myAge ( int $birthYear ) : string { // 現在の年から誕生年を引いて年齢を計算します。$yearsOld = date ( 'Y' ) - $birthYear ;// 年齢を説明的な文字列で返します。return $yearsOld . ( $yearsOld == 1 ? ' year' : ' years' ); }echo '私は現在 ' . myAge ( 1995 ) . ' 歳です。' ;

2026 年現在、上記のサンプル プログラムの出力は「私は現在 31 歳です。」となります。

PHP では、関数ポインタの代わりに、関数名を含む文字列で関数を参照することができます。この方法では、通常の PHP 関数を、たとえばコールバックとして、または関数テーブル内で使用できます。[ 217 ]ユーザー定義関数は、プロトタイプ化せずにいつでも作成できます。[ 216 ] [ 217 ]関数はコードブロック内で定義できるため、関数を定義するかどうかを実行時に決定function_existsできます。指定された名前の関数がすでに定義されているかどうかを判断する関数があります。関数呼び出しは括弧を使用する必要があります。ただし、PHP 演算子を使用して呼び出される引数のないクラスコンストラクターnew関数は例外で、この場合は括弧はオプションです。

PHP 4.0.1以降create_function()、 の薄いラッパーによってeval()、プログラム実行中に通常のPHP関数を作成できるようになりました。これはPHP 7.2で非推奨となり、PHP 8.0 [ 218 ]では削除されました。代わりに、PHP 5.3で追加された、周囲のスコープから変数をキャプチャできる匿名関数または「クロージャ[ 219 ]の構文が採用されました。短縮形の矢印構文はPHP 7.4で追加されました。[ 220 ]

関数getAdder ( $x ) { return fn ( $y ) => $x + $y ; }$adder = getAdder ( 8 ); echo $adder ( 2 ); // "10" と出力します

上記の例では、getAdder()関数は渡された引数を用いてクロージャを作成し$x、追加の引数を受け取り$y、作成されたクロージャを呼び出し元に返します。このような関数はファーストクラスオブジェクトであり、変数に格納したり、他の関数にパラメータとして渡したりすることができます。 [ 221 ]

動的型付け言語としては珍しく、PHPは関数のパラメータに対して型宣言をサポートしており、これは実行時に強制されます。これは、PHP 5.0以降ではクラスとインターフェース、PHP 5.1以降では配列、PHP 5.4以降では「呼び出し可能」型、PHP 7.0以降ではスカラー型(整数、浮動小数点数、文字列、ブール値)に対してサポートされています。[ 61 ] PHP 7.0では関数の戻り値の型宣言もサポートされており、パラメータリストの後にコロンを付けて型名を記述することで表現されます。[ 59 ]例えば、getAdder前述の例の関数は、PHP 7では次のように型アノテーションを付与できます。

関数getAdder ( int $x ) :クロージャ{ return fn ( int $y ) : int => $x + $y ; }$adder = getAdder ( 8 ); echo $adder ( 2 ); // "10" を出力しますecho $adder ( null ); // 間違った型が渡されたため例外がスローされます$adder = getAdder ([]); // これも例外をスローします

デフォルトでは、スカラー型の宣言は弱い型付けの原則に従います。例えば、パラメータの型が の場合int、PHPは整数だけでなく、変換可能な数値文字列、浮動小数点数、またはブール値もその関数に渡すことができ、それらを変換します。[ 61 ]しかし、PHP 7には「厳密な型付け」モードがあり、これを使用すると、ファイル内の関数呼び出しと戻り値に対してこのような変換が禁止されます。[ 61 ]

PHPオブジェクト

基本的なオブジェクト指向プログラミング機能はPHP 3で追加され、PHP 4で改善されました。[ 11 ]これによりPHPの抽象化がさらに進み、プログラマーはPHP 5で創造的なタスクをより簡単に実行できるようになりました。オブジェクトの処理はPHP 5で完全に書き直され、機能セットが拡張され、パフォーマンスが向上しました。[ 222 ]以前のバージョンのPHPでは、オブジェクトは値型のように扱われていました。[ 222 ]この方法の欠点は、渡されたオブジェクトのコピーを作成するのではなく、変更したい場合、コードでPHPの「参照」変数を多用する必要があることでした。新しいアプローチでは、オブジェクトは値ではなくハンドルによって参照されます。 [ 223 ]

PHP 5では、抽象クラス最終クラス抽象メソッド最終メソッドに加えて、プライベートおよびプロテクトのメンバー変数とメソッドが導入されました。また、 C++などの他のオブジェクト指向言語に似た、コンストラクタデストラクタを宣言する標準的な方法と、標準的な例外処理モデルも導入されました。さらに、PHP 5ではインターフェースが追加され、複数のインターフェースを実装できるようになりました。オブジェクトがランタイムシステムと対話できるようにする特別なインターフェースがあります。ArrayAccessを実装するオブジェクトは配列構文で使用でき、 IteratorまたはIteratorAggregateを実装するオブジェクトは言語構文で使用できます。エンジンには仮想テーブル機能がないため、静的変数はコンパイル時に参照ではなく名前でバインドされます。[ 224 ]foreach

開発者が予約語 を使ってオブジェクトのコピーを作成する場合clone、Zendエンジンは__clone()メソッドが定義されているかどうかを確認します。定義されていない場合は、__clone()オブジェクトのプロパティをコピーするデフォルトメソッドを呼び出します。__clone()メソッドが定義されている場合は、作成されたオブジェクトに必要なプロパティを設定する責任を負います。利便性のために、エンジンはソースオブジェクトのプロパティをインポートする関数を提供します。これにより、プログラマはソースオブジェクトの値渡しレプリカから開始し、変更が必要なプロパティのみをオーバーライドすることができます。[ 225 ]

PHPのプロパティとメソッドの可視性はキーワード 、、を使用して定義されます。varのみが使用されている場合、デフォルトはpublicです。はの同義語です。宣言された項目はどこからでもアクセスできます。は、継承されたクラス(および項目を定義しているクラス)へのアクセスを制限します。は、項目を定義しているクラスのみの可視性を制限します。[ 226 ]同じ型のオブジェクトは、同じインスタンスでなくても、お互いのprivateメンバーとprotectedメンバーにアクセスできます。[ 227 ]publicprivateprotectedvarpublicpublicprotectedprivate

以下は、PHP 8 における オブジェクト指向プログラミングの基本的な例です。

<?php抽象クラスUser{保護された文字列$name ;公開関数__construct (文字列$name ){// 最初の文字を大文字にし、残りを小文字にする$this -> name = ucfirst ( strtolower ( $name ) );}公開関数greet () :文字列{"こんにちは、私の名前は " です$this -> name ;を返します。}抽象パブリック関数job () :文字列;}クラスStudent はUserを拡張します{パブリック関数__construct (文字列$name プライベート文字列$course ){:: __construct ( $name );}パブリック関数job () :文字列{"I learn "を返します$this -> course ;}}クラスTeacherはUserを拡張します{パブリック関数__construct (文字列$name プライベート配列$teachingCourses ){:: __construct ( $name );}パブリック関数job () :文字列{"私は教えています"を返します。implode ( ", " , $this -> teachingCourses );}}$学生= [新入生( 「アリス「コンピュータサイエンス」)、新入生「ボブ」「コンピュータサイエンス」新入生「チャーリー」「ビジネス研究科」];$教師= [新しい教師( 「ダン」コンピュータサイエンス」「情報セキュリティ」])、新しい教師( 「エリン」コンピュータサイエンス」「3Dグラフィックスプログラミング」])、新しい教師( 「フランキー」オンラインマーケティング」「ビジネス研究」「電子商取引」])、];foreach ([ $students , $teachers ]を$usersとして) {echo $users [ 0 ] :: class . "s: \n " ;array_walk ( $users ,関数(ユーザー$user ) {echo " { $user -> greet () } , { $user -> job () } \n " ;});}

このプログラムは以下を出力します。

生徒: こんにちは、私の名前はアリスです。コンピュータサイエンスを学んでいます。 こんにちは、私の名前はボブです。コンピュータサイエンスを学んでいます 。 こんにちは、私の名前はチャーリーです。ビジネス学を学んでいます。 教師: こんにちは、私の名前はダンです。コンピュータサイエンスと情報セキュリティを教えています。 こんにちは、私の名前はエリンです。コンピュータサイエンスと3Dグラフィックスプログラミングを教えています。 こんにちは、私の名前はフランキーです。オンラインマーケティング、ビジネス学、電子商取引を教えています。

実装

PHPの完全な実装は、単にPHPとして知られるオリジナルのみです。これは最も広く使用されており、Zend Engineを搭載しています。他の実装との区別を明確にするために、非公式に「Zend PHP」と呼ばれることもあります。Zend Engineは、PHPのソースコードをオンザフライで実行可能な内部形式にコンパイルするため、インタープリタとして機能します。[ 228 ] [ 229 ]また、PHPには正式な仕様がないため、Zend PHPのセマンティクスがPHPのセマンティクスを定義するため、Zend PHPはPHPの「リファレンス実装」でもあります。PHPのセマンティクスはZendの動作によって定義され、複雑で微妙なニュアンスを持つため、競合する実装間で完全な互換性を提供することは困難です。[ 230 ]

PHPのスクリプト実行ごとに単一リクエストというモデルと、Zend Engineがインタープリタであるという事実は非効率性につながります。そのため、PHPのパフォーマンスを向上させるための様々な製品が開発されてきました。実行時間を短縮し、WebページにアクセスするたびにPHPソースコードをコンパイルする必要をなくすために、PHPスクリプトをPHPエンジンの内部形式で展開することもできます。これは、オペコードキャッシュを使用することで実現されます。オペコードキャッシュは、 PHPスクリプトのコンパイル済み形式(オペコード)を共有メモリにキャッシュすることで、スクリプト実行のたびにコードを解析およびコンパイルするオーバーヘッドを回避します。オペコードキャッシュであるZend Opcacheは、PHPバージョン5.5以降に組み込まれています。[ 231 ]広く使用されているオペコードキャッシュのもう1つの例として、 PECL拡張として利用可能なAlternative PHP Cache(APC)があります。[ 232 ]

Zend PHPは依然として最も人気のある実装ですが、他にもいくつかの実装が開発されています。これらの中にはコンパイラJITコンパイルをサポートするものもあり、PHPとの完全な互換性は欠くものの、Zend PHPよりもパフォーマンス上の利点があります。代替実装としては、以下のものがあります。

  • HHVM(HipHop Virtual Machine)はFacebookで開発され、オープンソースとして公開されています。PHPコードを高水準バイトコード(一般に中間言語と呼ばれる)に変換し、実行時にジャストインタイム(JIT)コンパイラによって動的にx86-64マシンコードに変換することで、最大6倍のパフォーマンス向上を実現します。[ 233 ]しかし、バージョン7.2以降、ZendはHHVMよりも優れたパフォーマンスを発揮し、[ 234 ] HHVM 3.24はPHPを公式にサポートする最後のバージョンです。[ 235 ]
    • HipHop  – Facebookで開発され、オープンソースとして公開されている。PHPスクリプトをC++create_function()コードに変換し、生成されたコードをコンパイルすることで、サーバー負荷を最大50%削減する。2013年初頭、Facebookは導入の難しさや、PHP言語全体(構文や構文を含む)のサポート不足など、複数の理由からHipHopを廃止し、HHVMを導入したeval()[ 236 ]
  • Parrot  – 動的言語を効率的に実行するように設計された仮想マシン。クロストランスレータ Pipp は PHP ソース コードをParrot 中間表現に変換し、それが Parrot のバイトコードに変換されて仮想マシンによって実行されます。
  • PeachPie – Roslynプラットフォーム上に構築された、 .NET共通中間言語(CIL) バイトコード用の第 2 世代コンパイラ。Phalangerの後継で、いくつかのアーキテクチャ コンポーネントを共有しています。
  • Phalanger  – PHPを.NET共通中間言語バイトコードにコンパイルします。PeachPieの前身です。
  • Quercus  – PHPをJavaバイトコードにコンパイルする

ライセンス

PHPはPHPライセンスに基づいてリリースされたフリーソフトウェアであり、その規定は次のとおりです。[ 237 ]

このソフトウェアから派生した製品は、group@php.net からの事前の書面による許可なく、「PHP」と名付けたり、製品名に「PHP」を含めることはできません。ただし、「PHP Foo」や「phpfoo」ではなく、「Foo for PHP」と表記することで、PHPと連携して動作するソフトウェアであることを示すことができます。

この「PHP」の使用制限により、PHPライセンスはGNU一般公衆利用許諾書(GPL)と互換性がなく、Zendライセンスは元のBSDライセンスと同様の広告条項があるため互換性がありません。[ 238 ]

開発とコミュニティ

PHPは、ソースコード配布物に様々なフリーおよびオープンソースのライブラリを組み込んでおり、またPHPバイナリビルドでもそれらを使用しています。PHPは基本的にインターネット対応のシステムであり、ファイル転送プロトコル(FTP)サーバーや、PostgreSQLMySQLMicrosoft SQL ServerSQLite(組み込みデータベース)、LDAPサーバーなどを含む多くのデータベースサーバーにアクセスするためのモジュールを内蔵しています。stdioファミリーなど、C言語プログラマに馴染みのある多くの関数は PHPの標準ビルドで利用可能です。[ 239 ]

PHP では、開発者がC拡張機能を記述してPHP 言語に機能を追加することができます。PHP 拡張機能は、PHP に静的にコンパイルすることも、実行時に動的にロードすることもできます。Windows APIUnix 系オペレーティングシステムでのプロセス管理、マルチバイト文字列 ( Unicode )、cURL、いくつかの一般的な圧縮形式のサポートを追加する拡張機能が数多く作成されています。拡張機能によって利用可能になる他の PHP 機能には、インターネットリレーチャット(IRC) との統合、イメージとAdob​​e Flashコンテンツの動的生成、データベースにアクセスするための抽象化レイヤーとしてのPHP データオブジェクト(PDO)、 [ 240 ] [ 241 ] [ 242 ] [ 243 ] [ 244 ] [ 245 ] [ 246 ]、さらには音声合成などがあります。文字列や配列を処理する機能など、言語のコア機能の一部も拡張機能として実装されています。[ 247 ] PHP Extension Community Library (PECL) プロジェクトは、PHP 言語の拡張機能のリポジトリです。[ 248 ]コミュニティのほとんどはウェブ開発とサーバーサイドでのPHPの実行(クライアントサイドではJavaScriptも提供)に焦点を当てており、例外的な用途としては、例えばスタンドアロンのグラフィカルアプリケーションPHP-GTKは10年以上メンテナンスされていない)、[ 249 ]さらにはドローンの制御などがあります。[ 250 ]

Zephirなどの他のプロジェクトでは、PHP拡張機能を高水準言語で作成し、ネイティブPHP拡張機能にコンパイルする機能を提供しています。このようなアプローチは、PHP拡張機能をC言語で直接記述する代わりに、拡張機能の開発を簡素化し、プログラミングとテストにかかる時間を短縮します。[ 251 ]

2018年12月までに、PHPグループは10人で構成されていました:Thies C. ArntzenStig BakkenShane CaraveoAndi GutmansRasmus LerdorfSam RubySascha SchumannZeev SuraskiJim WinsteadAndrei Zmievski[ 252 ]

Zend Technologiesは、プログラマーが認定PHP開発者になるために、 PHP 8 [ 253 ]試験(以前はPHP 7と5.5に基づいていた)に基づいたPHP認定を提供しています。

PHP財団

PHP
形成2021年11月22日 ( 2021-11-22 )
創設者AutomatticLaravel、Acquia、Zend、Private Packagist、Symfony、Craft CMS、Tideways、PrestaShopJetBrains [ 254 ]
Webサイトhttps://thephp.foundation

2021年11月26日、JetBrainsのブログはPHPの設計と開発を支援するPHP Foundationの設立を発表しました。[ 255 ]

コミットレビューRFC
2022年[ 256 ]683 283 8
2023年[ 257 ]784 702 17
2024年[ 258 ]1976 1278 13

財団はPHP言語のコアリポジトリの開発に従事する「コア開発者」を雇用しています。財団理事のロマン・プロンスキー氏は、開発者には「市場水準の給与」を支払うことを目指していると述べています。[ 259 ]

財団に対する反応は概ね好意的であり、評論家たちはPHPの継続的な開発を保証し、言語コミュニティと人気の安定化に貢献した財団の役割を称賛している。[ 260 ] [ 261 ]

ドイツのソブリン・テック・ファンドはPHP財団を支援するために20万ユーロ以上を提供した。[ 262 ]

インストールと設定

PHP 7.1 の phpinfo() 関数の出力例

PHP のサポートを Web サーバーに追加する主な方法は 2 つあります。ネイティブ Web サーバー モジュールとして追加する方法と、CGI 実行ファイルとして追加する方法です。PHP には、サーバー アプリケーション プログラミング インターフェイス(SAPI) と呼ばれる直接的なモジュール インターフェイスがあり、Apache HTTP ServerMicrosoft IISCaddy (FrankenPHP 経由)、iPlanet Web Serverなど、多くの Web サーバーでサポートされています。OmniHTTPd など、他の一部の Web サーバーは、Microsoftの Web サーバー モジュール インターフェイスであるInternet Server Application Programming Interface (ISAPI) をサポートしています。PHP が Web サーバー用のモジュール サポートを備えていない場合は、常にCommon Gateway Interface (CGI) またはFastCGIプロセッサとして使用できます。その場合、Web サーバーは、PHP ファイルへのすべてのリクエストを PHP の CGI 実行ファイルを使用して処理するように設定されます。[ 263 ]

PHP-FPM(FastCGI Process Manager)は、PHPの代替FastCGI実装であり、バージョン5.3.3以降の公式PHPディストリビューションにバンドルされています。[ 264 ]以前のFastCGI実装と比較すると、いくつかの追加機能が含まれており、主に負荷の高いWebサーバーに役立ちます。[ 265 ]

PHPをコマンドラインスクリプトに使用する場合、PHPコマンドラインインターフェース(CLI)実行ファイルが必要です。PHPはPHP 4.3.0以降、 CLIサーバーアプリケーションプログラミングインターフェース(SAPI)をサポートしています。 [ 266 ]このSAPIの主な目的は、 PHPを用いたシェルアプリケーションの開発です。CLI SAPIと他のSAPIの間には多くの違いがありますが、多くの動作は共通しています。[ 267 ]

PHPには、様々なウェブサーバー向けのSAPIと呼ばれる直接的なモジュールインターフェースがあります。[ 268 ] Windows上のPHP 5とApache 2.0の場合、php5apache2.dllと呼ばれるDLLファイルの形式で提供されます。 [ 269 ]これは、PHPとウェブサーバー間のインターフェースを提供するモジュールであり、サーバーが理解できる形式で実装されています。この形式はSAPIとして知られています。

様々なウェブサーバー拡張機能には、様々な種類のSAPIが存在します。例えば、PHP言語用のSAPIには、上記に加えて、Common Gateway Interfaceやコマンドラインインターフェースなどがあります。[ 268 ] [ 270 ]

PHP は、「PHP デスクトップ」を使用することで、デスクトップグラフィカル ユーザー インターフェイス(GUI) アプリケーションの作成にも使用できます。GitHub または廃止されたPHP-GTK拡張モジュール。PHP-GTKは公式PHPディストリビューションには含まれておらず[ 263 ]、拡張モジュールとしてPHPバージョン5.1.0以降でのみ使用できます。PHP-GTKをインストールする最も一般的な方法は、ソースコードからコンパイルすることです[ 271 ] 。

PHPをクラウド環境にインストールして使用する場合、クラウド固有の機能を使用するためのソフトウェア開発キット(SDK)が提供されます。 [ 272 ]例えば:

多数の設定オプションがサポートされており、PHPのコア機能と拡張機能の両方に影響します。[ 275 ] [ 276 ]設定ファイルはphp.ini、PHPの使用方法に応じて異なる場所で検索されます。 [ 277 ]設定ファイルはさまざまなセクションに分かれており、[ 278 ]一部の設定オプションはウェブサーバー設定内でも設定できます。[ 279 ]

使用

LAMPソフトウェアバンドルの概要をSquidとともにここに表示します

PHPは汎用スクリプト言語で、特にサーバーサイドのWeb開発に適しています。この場合、PHPは通常Webサーバー上で実行されます。要求されたファイル内のPHPコードはPHPランタイムによって実行され、通常はWebサイトなどで使用される動的なWebページコンテンツや動的な画像を作成します。 [ 280 ]また、コマンドラインスクリプトやクライアントサイドのグラフィカルユーザーインターフェイス(GUI)アプリケーションにも使用できます。PHPはほとんどのWebサーバー、多くのオペレーティングシステムプラットフォームに導入でき、多くのリレーショナルデータベース管理システム(RDBMS)で使用できます。ほとんどのWebホスティングプロバイダーは、クライアントによるPHPの使用をサポートしています。PHPは無料で利用でき、PHPグループではユーザーが独自に構築、カスタマイズ、拡張できるように完全なソースコードを提供しています。[ 15 ]

動的 Web ページ:サーバー側スクリプトの例(PHP および MySQL)

PHPはもともと動的なウェブページを作成するために設計されたが、現在では主にサーバーサイドスクリプティングに重点を置いており、[ 281 ] PythonMicrosoftASP.NETSun MicrosystemsJavaServer Pages[ 282 ]など、ウェブサーバーからクライアントに動的なコンテンツを提供する他のサーバーサイドスクリプト言語と類似している。PHPはまた、迅速なアプリケーション開発(RAD)を促進するための構成要素と設計構造を提供する多くのソフトウェアフレームワークの開発も引き付けている。これらの中には、他のウェブフレームワークと同様の機能を提供するPRADOCakePHPSymfonyCodeIgniterLaravelYii FrameworkPhalconLaminasなどがある。 mod_perl

LAMPアーキテクチャは、ウェブアプリケーションを展開する方法としてウェブ業界で人気が高まっている。[ 283 ]このバンドルでは、 PHPはLinuxApacheMySQLとともにPとしてよく使用されているが、PはPythonPerl、またはこれら3つの組み合わせを指すこともある。同様のパッケージであるWAMPMAMPもWindowsmacOSで利用可能で、最初の文字はそれぞれのオペレーティングシステムを表しています。PHPとApacheはどちらもmacOSの基本インストールの一部として提供されていますが、これらのパッケージのユーザーは、より簡単に最新の状態に維持できる、よりシンプルなインストールメカニズムを求めています。

特定の、より高度な使用シナリオ向けに、PHP はCまたはC++でカスタム拡張機能を作成するための明確に定義されドキュメント化された方法を提供しています。[ 284 ] [ 285 ] [ 286 ] [ 287 ] [ 288 ] [ 289 ] [ 290 ]追加ライブラリの形で言語自体を拡張することに加えて、拡張機能は、実行速度が重要であり、真のコンパイル言語を使用することで改善の余地がある場合に、実行速度を向上させる方法を提供しています。[ 291 ] [ 292 ] PHP は、他のソフトウェアプロジェクトに組み込むための明確に定義された方法も提供しています。これにより、PHP を別のプロジェクトの内部スクリプト言語として簡単に使用でき、プロジェクト固有の内部データ構造との緊密なインターフェースも提供されます。[ 293 ]

PHPはコア言語レベルでマルチスレッドをサポートしていないため賛否両論の評価を受けているが[ 294 ] 、 PECL拡張モジュール「pthreads」によってスレッドの使用が可能になっている。[ 295 ] [ 296 ]

コマンドライン インターフェイス php-cli と、PHP 用の 2 つのActiveX Windows Script Hostスクリプト エンジンが作成されました。

人気度と使用状況の統計

PHPは、 MediaWiki[ 297 ] WordPress[ 298 ] Joomla[ 299 ] Drupal[ 300 ] Moodle[ 301 ] eZ PublisheZ PlatformSilverStripeなどのWebコンテンツ管理システムに使用されています。[ 302 ]

2013年1月時点で、PHPは2億4000万以上のウェブサイト(サンプルの39%)で使用されており、210万台のウェブサーバーにインストールされていました。[ 303 ]

2025年12月20日現在(PHP 8.5のリリースから1か月後)、言語が特定できたウェブサイトの72.5%でPHPがサーバーサイドプログラミング言語として使用されています。PHP 8は最も使用されている言語バージョンで、PHPを使用しているウェブサイトの54.7%がこのバージョンを使用しています。一方、PHP 7を使用しているウェブサイトは35.9%、PHP 5を使用しているウェブサイトは9.3%、PHP 4を使用しているウェブサイトは0.1%です。[ 194 ]

PHP 8 54.7%
PHP 7 35.9%
PHP 5 9.3%
PHP 4 0.1%

2025年12月20日時点のPHPバージョンの使用シェア:PHP 8.5リリースの1か月後[ 194 ] [ 304 ] [ 305 ] [ 306 ] [ 307 ]
  1. PHP 8.5: PHP 8の0.1% (0.05%)
  2. PHP 8.4: PHP 8の6.7% (3.66%)
  3. PHP 8.3: PHP 8の20.9% (11.4%)
  4. PHP 8.2: PHP 8の38.6% (21.1%)
  5. PHP 8.1: PHP 8の23.2% (12.7%)
  6. PHP 8.0: PHP 8の10.6% (5.80%)
  7. PHP 7.4: PHP 7の73.8% (26.5%)
  8. PHP 7.3: PHP 7の10.7% (3.84%)
  9. PHP 7.2: PHP 7の8.30% (2.98%)
  10. PHP 7.1: PHP 7の3.40% (1.22%)
  11. PHP 7.0: PHP 7の3.70% (1.33%)
  12. PHP 5.6: PHP 5の54.9% (5.11%)
  13. PHP 5.5: PHP 5の15.0% (1.40%)
  14. PHP 5.4: PHP 5の15.0% (1.40%)
  15. PHP 5.3: PHP 5の8.00% (0.74%)
  16. PHP 5.2: PHP 5の6.70% (0.62%)
  17. PHP 5.1: PHP 5 の 0.40% (0.04%)
  18. PHP 5.0: PHP 5 の 0.1% 未満 (0.00%)
  19. PHP 4.4: PHP 4 の 73.9% (0.07%)
  20. PHP 4.3: PHP 4の22.0% (0.02%)
  21. PHP 4.2: PHP 4 の 2.70% (0.00%)
  22. PHP 4.1: PHP 4 の 0.70% (0.00%)
  23. PHP 4.0: PHP 4 の 0.10% (0.00%)

安全

2019年に国家脆弱性データベースに掲載された脆弱性の11%はPHPに関連していました。[ 308 ]歴史的には、このデータベースに1996年以降に掲載された脆弱性の約30%がPHPに関連しています。言語自体またはそのコアライブラリの技術的なセキュリティ上の欠陥はそれほど多くありません(2009年には22件で、全体の約1%ですが、掲載されているプログラムの約20%にPHPが該当します)。[ 309 ]プログラマーがミスを犯すことを認識し、一部の言語では、多くの問題を引き起こす入力検証の欠如を自動的に検出する汚染チェックが組み込まれています。このような機能は過去にPHPに対して提案されましたが、却下されたか、提案が放棄されました。[ 310 ] [ 311 ] [ 312 ]

Suhosin [ 313 ]やSnuffleupagus [ 314 ]などのサードパーティプロジェクトは、言語の危険な部分を削除または変更することを目的としています。

歴史的に、PHPの旧バージョンには、実行時設定のための設定パラメータとデフォルト値がいくつか存在し、一部のPHPアプリケーションでセキュリティ上の問題が発生する可能性がありました。これらのうち、最もよく知られていたのは[315]magic_quotes_gpcregister_globals[ 316 ]の設定ディレクティブです。[317]は、URLパラメータをPHP変数に変換し、攻撃者が初期化されていないグローバル変数の値を設定してPHPスクリプトの実行を妨害できるようにすることで、深刻なセキュリティ上の脆弱性を招きました。「マジッククォート」と「グローバル変数の登録」設定のサポートはPHP 5.3.0以降非推奨となり、PHP 5.4.0では削除されました。[ 318 ]

ランタイム設定の脆弱性のもう1つの例は、アップロードされたファイルが保存されているディレクトリに対してPHPの実行を無効にしていない場合(たとえば、engine構成ディレクティブを使用して)に発生します。 [ 317 ]これを有効にすると、アップロードされたファイルに埋め込まれた悪意のあるコードが実行される可能性があります。 [ 318 ] [ 319 ] [ 320 ]ベストプラクティスは、Webサーバーで利用可能なドキュメントルートの外側に画像ディレクトリを配置し、中間スクリプトを介して提供するか、アップロードされたファイルを保存するディレクトリに対してPHPの実行を無効にすることです。

また、共有ウェブホスティング環境でPHP拡張機能の動的読み込みを有効にすると(enable_dl設定ディレクティブ経由)[ 321 ]、セキュリティ上の問題が発生する可能性があります。[ 322 ] [ 323 ]

暗黙の型変換によって異なる値が等価とみなされ、場合によってはプログラマの意図に反する形でセキュリティ上の問題が生じる可能性があります。例えば、比較の結果は'0e1234' == '0'となります。これは、数値として解析可能な文字列が数値に変換されるためです。この場合、最初に比較された値は、値 ( ) を持つ科学的記数法trueとして扱われます。0 × 10 1234)はゼロです。このようなエラーは、MD5パスワードハッシュを比較する際に、 Simple Machines Forum [ 324 ]Typo3 [ 325 ]phpBB [ 326 ]で認証の脆弱性を引き起こしました。 推奨される方法は、(タイミング攻撃の安全性のため)または恒等演算子()を使用することです。hash_equals()strcmp==='0e1234' === '0'false

Zone-Hが発表した2013年の17万件以上のウェブサイト改ざんの分析では、最も頻繁に(53%)使用された手法はファイルインクルードの脆弱性の悪用であり、主にPHP言語の構成要素の、、の安全でない使用に関連していました。[ 327 ] [ 328 ]includerequireallow_url_fopen

暗号セキュリティ

PHPには、疑似乱数生成器を使用するrand()[ 329 ]およびmt_rand()[ 330 ]関数が含まれていますが、これらは暗号的に安全ではありません。バージョン8.1以降では、システムが提供する暗号的に安全な乱数源を使用する関数が含まれています。[ 331 ]random_int()

PHPのエントロピーソースに対して実行可能な攻撃には、「シード攻撃」と「状態回復攻撃」の2種類があります。2012年時点で、250ドルのGPUは1秒あたり最大2.30回のMD5計算を実行できます 750ドルのGPUは同時にその4倍の計算を実行できます。[ 332 ]これは「誕生日攻撃」と組み合わせると、深刻なセキュリティ脆弱性につながる可能性があります。

長期サポート

PHP開発チームは、マイナーバージョンのリリース後2年間は公式のバグ修正を提供し、その後2年間はセキュリティ修正のみをリリースします。[ 192 ]その後、そのリリースはサポート終了とみなされ、公式サポートは終了します。

これを超える長期サポートは、Zendなどの商用プロバイダーから提供されています[ 333 ] [ 334 ]

参照

参考文献

  1. ^ Zendエンジンの大部分は、PHP 4以降のバージョンではZend Engine Licenseの下にある( PHPバージョン3.0以前では、 GNU General Public Licenseバージョン2以降とPHP Licenseのデュアルライセンス) 。 [ 5 ]
  1. ^ a b Lerdorf, Rasmus (1995年6月8日). 「アナウンス:パーソナルホームページツール(PHPツール)」 . 2011年6月7日閲覧
  2. ^ a b Lerdorf, Rasmus (2017年4月26日). 「PHP on Hormones – Rasmus LerdorfによるPHPの歴史に関するプレゼンテーション(カリフォルニア州サンタクララのMySQLカンファレンスにて)」 The Conversations Network. 2013年7月29日時点のオリジナルよりアーカイブ。 2009年6月22日閲覧
  3. ^ 「バージョン 8.5.2」 2026年1月15日. 2026年1月17日閲覧
  4. ^ 「PHP: 関数の引数 – マニュアル」
  5. ^ 「PHP: リリースアーカイブ(ミュージアム)」
  6. ^ 「PHP: 序文 – マニュアル」
  7. ^ Stogov, Dmitry [@dstogov] (2015年12月4日). 「#PHP7 の最適化のアイデアの一部がHHVM、LuaJIT、V8から生まれたことは周知の事実です。@HipHopVM @SaraMG に感謝します。#php7thankyou」 (ツイート) – Twitter経由。
  8. ^ 「PHP: ハイパーテキストプリプロセッサ」 。 2020年2月12日閲覧
  9. ^ a bポール・クリル(2013年11月18日)「誇大広告を信じろ:PHP創設者がFacebookのヒップホップ技術を支持」InfoWorld2022年10月13日閲覧
  10. ^ 「お知らせ:個人ホームページツール(PHPツール)」 。 2022年11月3日閲覧
  11. ^ a b c d e f g h i PHPと関連プロジェクトの歴史」 PHPグループ. 2008年2月25日閲覧
  12. ^ a b「PHPの歴史」 . php.net .
  13. ^ Olsson, Mikael (2013年9月4日). PHPクイックスクリプトリファレンス. Apress. ISBN 978-1-4302-6284-8
  14. ^ PHP マニュアル: 序文、PHP。
  15. ^ a b「HTMLへのPHPの埋め込み」 O'Reilly. 2001年5月3日. 2008年2月19日時点のオリジナルよりアーカイブ2008年2月25日閲覧。
  16. ^ Lerdorf, Rasmus (2012年7月20日). 「PHPはPerlで書かれたと言い続ける人がいるのはなぜだろう。そんなことは決してないのに。#php」 . Twitter . 2014年9月4日閲覧
  17. ^ Lerdorf, Rasmus (2007-04-26). 「PHP on Hormones」 . The Conversations Network.オリジナル(mp3)から2019年1月6日にアーカイブ。 2009年6月22日閲覧
  18. ^ Lerdorf, Rasmus (2007). 「スライド3」 . 「PHP on Hormones」講演スライド. PHPグループ. 2009年6月22日閲覧.
  19. ^ Lerdorf, Rasmus (1995-06-08). 「お知らせ: 個人ホームページツール (PHPツール)」 .ニュースグループcomp.infosystems.www.authoring.cgi . 2006年9月17日閲覧
  20. ^ 「Rasmus Lerdorf、Yahoo!シニアテクニカル:PHP、Behind the Mic」 2003年11月19日。 2013年7月28日時点のオリジナルよりアーカイブ。
  21. ^ Alshetwi, AB; Rahmat, RAAO; Borhan, MN; Ismael, S.; Ali, A.; Irtema, HIM; Alfakhria, AY (2018). 「発展途上国における道路交通の最適化のためのWebベースエキスパートシステム」2024年2月13日閲覧
  22. ^ 「PHPの問題」 。 2010年12月20日閲覧
  23. ^ "php.internals: Re: 関数名の一貫性" . news.php.net . 2013年12月28日. 2014年2月9日閲覧
  24. ^ Rasmus Lerdorf (2013年12月16日). 「Re: 柔軟な関数命名」 .ニュースグループphp.internals . 2013年12月26日閲覧
  25. ^ 「PHP – 頭字語の意味投票」 PHP.net . 2000年8月15日時点のオリジナルよりアーカイブ
  26. ^ 「Zend Engine バージョン 2.0: 機能の概要と設計」。Zend Technologies Ltd. 2006年7月19日時点のオリジナルよりアーカイブ 20069月17日閲覧。
  27. ^ 「php.net 2007 ニュースアーカイブ」 . PHPグループ. 2007年7月13日. 2008年2月22日閲覧
  28. ^ Kerner, Sean Michael (2008年2月1日). 「PHP 4は死んだ――PHP 5は長生きだ」 . InternetNews. 2018年8月6日時点のオリジナルよりアーカイブ。 2018年12月16日閲覧
  29. ^ Trachtenberg, Adam (2004-07-15). 「PHP 5が素晴らしい理由!」 O'Reilly. 2016年3月31日時点のオリジナルよりアーカイブ。 2008年2月22日閲覧
  30. ^ "GoPHP5" . 2011年7月17日時点のオリジナルよりアーカイブ
  31. ^ 「PHPプロジェクトがGo PHP 5に協力」(PDF) . GoPHP5プレスリリース.オリジナル(PDF)から2019年8月4日時点のアーカイブ。 2008年2月23日閲覧
  32. ^ "GoPHP5" . GoPHP5. 2011年4月27日時点のオリジナルよりアーカイブ。 2008年2月22日閲覧
  33. ^ 「型: 文字列 (PHPマニュアル)」 . PHP.net . 2013年9月22日閲覧
  34. ^ 「文字列型の詳細(PHPマニュアル)」 . PHP.net . 2021年9月22日閲覧
  35. ^ Andrei Zmievski (2005年8月10日). 「PHP Unicodeサポート設計書」(メーリングリスト) . 2014年2月9日閲覧
  36. ^ 「PHP 5.5 または 6.0」2014年2月9日閲覧。
  37. ^ Andrei Zmievski (2011年4月22日). 「善きもの、悪しきもの、そして醜いもの:UnicodeとPHP 6に何が起こったのか」 . 2014年2月9日閲覧
  38. ^ Rasmus Lerdorf (2010-03-11). 「PHP 6」(メーリングリスト). 2014年2月7日閲覧。
  39. ^ 「PHPにおける遅延静的バインディング」 Digital Sandwich、2006年2月23日。 2008年3月25日閲覧
  40. ^ 「Static Keyword」 . PHPグループ. 2008年3月25日閲覧。
  41. ^ a b c d「PHP: リリースプロセス」 . 2011年6月20日. 2013年10月6日閲覧
  42. ^ 「PHP for Windows: バイナリとソースのリリース (5.3)」 . php.net . 2013年10月29日閲覧
  43. ^ 「PHP for Windows: バイナリとソースのリリース (5.4)」 . php.net . 2013年10月29日閲覧
  44. ^ 「PHP for Windows: バイナリとソースのリリース (5.5)」 . php.net . 2013年10月29日閲覧
  45. ^ 「PHP: サポートされているバージョン」
  46. ^ 「PHP 6 vs PHP 7の終わらないマペット論争」 。 2015年11月19日時点のオリジナルよりアーカイブ2015年11月19日閲覧。
  47. ^ 「RFC: PHPの次期リリース名」 . php.net . 2014年7月7日. 2014年7月15日閲覧
  48. ^ 「Re: [PHP-DEV] [VOTE] [RFC] PHPの次期リリース名(再び)」 2014年7月30日. 2014年7月30日閲覧
  49. ^ 「phpng: PHP エンジンのリファクタリングによりパフォーマンスが大幅に向上。news.php.net
  50. ^ "PHP: rfc:phpng" . php.net . 2014年12月16日閲覧
  51. ^ a b "PHP: phpng" . php.net . 2014年7月15日閲覧
  52. ^ 「ブランチ 'ZendEngine3' をマージ」" . github.com . 2014-12-05 . 2014-12-05に取得.
  53. ^ a b「PHP RFC: Uniform Variable Syntax」 . php.net . 2014年5月31日. 2014年7月30日閲覧
  54. ^ 「PHP RFC: "foreach" の動作を修正」 . php.net . 2015年5月21日閲覧。
  55. ^ a b "PHP RFC: 整数セマンティクス" . php.net . 2015年5月21日閲覧。NaNとInfinityを整数にキャストする際に常にゼロになるようにすることで、クロスプラットフォームの一貫性が向上し、現在の結果よりも驚きが少なくなります。
  56. ^ 「PHP RFC: オーバーフロー時のZPPエラー」 . php.net . 2015年5月21日閲覧
  57. ^ 「PHP RFC: 廃止された、またはまだPHP7に移植されていないSAPIと拡張機能の削除」 . php.net . 2015年5月21日閲覧
  58. ^ 「PHP RFC: 代替PHPタグの削除」 . php.net . 2015年5月21日閲覧。
  59. ^ a b c「RFC: 戻り値の型」 . php.net . 2015年1月27日. 2015年1月28日閲覧
  60. ^ a b "PHP: rfc:typed_properties_v2" . wiki.php.net . 2019年4月4日閲覧
  61. ^ a b c d e f「RFC: スカラー型宣言」 . php.net . 2015年3月16日. 2015年3月17日閲覧
  62. ^ a b "PHP: rfc:iterable" . php.net . 2016年6月10日. 2023年6月30日閲覧
  63. ^ a b "PHP: rfc:nullable_types" . php.net . 2014年4月10日. 2023年6月30日閲覧
  64. ^ a b "PHP: rfc:void_return_type" . php.net . 2015年11月9日. 2015年11月14日閲覧
  65. ^ a b「PHP: rfc:object-typehint」 . wiki.php.net .
  66. ^ a b "PHP: rfc:isset_ternary" . php.net . 2014年12月16日閲覧
  67. ^ a b「複合比較(宇宙船)演算子」 . php.net . 2015年5月21日閲覧
  68. ^ a b "PHP: rfc:short_list_syntax" . php.net . 2016年4月7日. 2023年6月30日閲覧
  69. ^ a b "PHP: rfc:multiple-catch" . php.net . 2016年3月6日. 2023年6月30日閲覧
  70. ^ a b「PHP: rfc:flexible_heredoc_nowdoc_syntaxes」 . wiki.php.net .
  71. ^ a b "PHP: rfc:null_coalesce_equal_operator" . wiki.php.net . 2019年4月4日閲覧
  72. ^ a b c Brent. 「PHP 8の新機能」 Stitcher . 2020年9月22日閲覧
  73. ^ 「PHP 8 リリース」 . PHP . 2020年11月27日閲覧
  74. ^ Brent. 「PHP 8:実際のウェブアプリケーションにおけるJITパフォーマンス」 Stitcher.io . 2020年10月4日閲覧
  75. ^ Rethams, Derick. 「PHP 8: JIT の概要」 .
  76. ^ポポフ、ニキータ (2020 年 7 月 13 日)。「PHP 8.0の新機能は?」Nikita Popov著。PHP fwdays。2021年12月11日時点のオリジナルよりアーカイブ。2020年10月4日閲覧。
  77. ^ Daniele, Carlo (2020年5月25日). 「PHP 8の新機能(機能、改善点、JITコンパイラ)」 . Kinsta . 2020年12月24日閲覧
  78. ^ Karunaratne, Ayesh. 「PHP 8.2: センシティブパラメータ値の編集サポート」 . PHP.Watch . 2025年10月12日閲覧
  79. ^ a b「PHP: rfc:marking_overriden_methods」 . wiki.php.net . 2023年12月17日閲覧
  80. ^ "PHP: rfc:deprecated_attribute" . wiki.php.net . 2025年10月12日閲覧
  81. ^ "PHP: rfc:marking_return_value_as_important" . wiki.php.net . 2025年10月12日閲覧
  82. ^ "PHP: rfc:delayedtargetvalidation_attribute" . wiki.php.net . 2025年11月14日閲覧
  83. ^ Scherzer, Daniel (2025年8月20日). 「ブログ: #[\DelayedTargetValidation] 属性の説明」 . scherzer.dev . 2025年11月14日閲覧
  84. ^ a b「PHP RFC: Union Types 2.0」 . wiki.php.net . 2020年8月14日閲覧
  85. ^ a b「PHP: rfc:pure-intersection-types」 . wiki.php.net . 2021年11月26日閲覧
  86. ^ a b "PHP: rfc:dnf_types" . wiki.php.net . 2023年2月7日閲覧
  87. ^ a b "PHP: rfc:noreturn_type" . wiki.php.net . 2021年11月26日閲覧
  88. ^ a b「PHP: rfc:null-false-standalone-types」 . wiki.php.net . 2022年6月16日閲覧
  89. ^ a b「PHP: rfc:true-type」 . wiki.php.net . 2022年6月16日閲覧
  90. ^ a b「PHP RFC: より健全な文字列と数値の比較」 . wiki.php.net . 2020年8月14日閲覧
  91. ^ a b「PHP RFC: Saner numeric strings」 . wiki.php.net . 2020年8月14日閲覧
  92. ^ a b "PHP: rfc:lsp_errors" . wiki.php.net . 2019年5月26日閲覧
  93. ^ Karunaratne, Ayesh. 「PHP 8.1: null非許容の内部関数パラメータに「null」を渡すことは非推奨」 . PHP.Watch . 2025年10月12日閲覧
  94. ^ Karunaratne, Ayesh. 「PHP 8.2: 動的プロパティは非推奨」 . PHP.Watch . 2025年10月12日閲覧
  95. ^ a b c d e f g h i j k l「サポートされていないブランチ」 . php.net . 2019年7月31日閲覧
  96. ^ 「PHP 4.0.0 リリース」2020年10月25日閲覧。
  97. ^ a b c d「PHP: PHP 4 ChangeLog」 . PHPグループ. 2008年1月3日. 2008年2月22日閲覧
  98. ^ 「PHP 4.1.0 リリースアナウンスメント」 。 2020年10月25日閲覧
  99. ^ 「PHP 4.2.0 リリースアナウンスメント」 。 2020年10月25日閲覧
  100. ^ 「PHP 4.3.0 リリースアナウンスメント」 。 2020年10月25日閲覧
  101. ^ 「コマンドラインからPHPを使用する」 . PHPマニュアル. PHPグループ. 2009年9月11日閲覧
  102. ^ 「PHP 4.4.0 リリースアナウンスメント」 。 2020年10月25日閲覧
  103. ^ 「PHP 4.4.0 リリースアナウンスメント」 . PHPマニュアル. PHPグループ. 2013年11月24日閲覧
  104. ^ 「PHP 5.0.0 リリース!」2020年10月25日閲覧
  105. ^ a b c「PHP: PHP 5 ChangeLog」 . PHPグループ. 2007年11月8日. 2008年2月22日閲覧
  106. ^ 「PHP 5.1.0 リリースアナウンスメント」 。 2020年10月25日閲覧
  107. ^ 「PHPマニュアル: PDO」 . PHPグループ. 2011年11月15日. 2011年11月15日閲覧
  108. ^ 「PHP 5.2.0 リリースアナウンスメント」 。 2020年10月25日閲覧
  109. ^ 「PHP 5.3.0 リリースアナウンスメント」 。 2020年10月25日閲覧
  110. ^ 「PHP 5.4.0 リリースアナウンスメント」 。 2020年10月25日閲覧
  111. ^ 「組み込みウェブサーバー」 。 2012年3月26日閲覧
  112. ^ 「PHP 5.5.0 リリースアナウンスメント」 。 2020年10月25日閲覧
  113. ^ a b c d「サポートされているバージョン」 . php.net . 2017年12月13日閲覧
  114. ^ 「PHP 5.5.0の変更点」 . php.net . 2015年3月1日時点のオリジナルよりアーカイブ2015年3月3日閲覧。
  115. ^ 「PHP 5.6.0 リリースアナウンスメント」 。 2020年10月25日閲覧
  116. ^ 「PHP 5.5.xからPHP 5.6.xへの移行」 . php.net . 2014年3月24日閲覧
  117. ^ Corbet, Jonathan (2010年3月24日). 「PHP 6のリセット」少なくとも2008年以降、PHP 6を解説したとされる書籍が店頭に並んでいます。しかし、2010年3月現在、PHP 6のリリースはまだ行われていません。それどころか、リリースに近づいてすらいません。最近の出来事から、PHP 6は2011年より前にはリリースされないことが示唆されています。そもそもリリースされるとしてもです。
  118. ^ Krill, Paul (2014-10-31). 「PHP 7、フルスピードで前進」 . InfoWorld .最近のPHPのバージョンは5.xリリースシリーズに含まれていますが、PHP 6はリリースされません。「数年前にバージョン6の計画がありましたが、当時の計画は現在のものとは大きく異なっていたため、バージョン6はスキップします」とGutmans氏は述べています。バージョン7に直接移行することで混乱を避けることができます。
  119. ^ 「ニュースアーカイブ – 2018: PHP 7.2.9 リリース」 . php.net . 2018年8月16日. 2018年8月16日閲覧
  120. ^ "PHP: rfc:size_t_and_int64_next" . php.net . 2014年12月16日閲覧
  121. ^ "PHP: rfc:abstract_syntax_tree" . php.net . 2014年12月16日閲覧
  122. ^ "PHP: rfc:closure_apply" . php.net . 2014年12月16日閲覧
  123. ^ "PHP: rfc:integer_semantics" . php.net . 2014年12月16日閲覧
  124. ^ 「RFC: Unicodeコードポイントエスケープ構文」 . 2014年11月24日. 2014年12月19日閲覧
  125. ^ 「PHP RFC: ジェネレーター委任」 . php.net . 2015年5月21日閲覧
  126. ^ 「PHP RFC: 匿名クラス」 . php.net . 2015年5月21日閲覧
  127. ^ 「PHP RFC: Easy User-land CSPRNG」 . php.net . 2015年5月21日閲覧
  128. ^ 「PHP RFC: エンジン内の例外(PHP 7用)」 . php.net . 2015年5月21日閲覧
  129. ^ 「PHP RFC: グループ使用宣言」 . php.net . 2015年5月21日閲覧
  130. ^ "PHP: rfc:class_constant_visibility" . php.net . 2015年10月27日. 2015年12月8日閲覧
  131. ^ "PHP: rfc:libsodium" . wiki.php.net .
  132. ^ 「PHP: rfc:allow-abstract-function-override」 . wiki.php.net .
  133. ^ "PHP: rfc:parameter-no-type-variance" . wiki.php.net .
  134. ^ "PHP: todo:php73" . wiki.php.net
  135. ^ "PHP: rfc:list_reference_assignment" . wiki.php.net .
  136. ^ "PHP: rfc:pcre2-migration" . wiki.php.net .
  137. ^ 「PHP: hrtime – マニュアル」 . php.net .
  138. ^ 「PHP 7.4.0 リリース!」 . php.net . 2019年11月28日閲覧。
  139. ^ "PHP: rfc:preload" . wiki.php.net . 2019年4月4日閲覧。
  140. ^ 「PHP: rfc:improve-openssl-random-pseudo-bytes」 . wiki.php.net . 2019年4月4日閲覧。
  141. ^ "PHP: rfc:weakrefs" . wiki.php.net . 2019年4月5日閲覧
  142. ^ "PHP: rfc:ffi" . wiki.php.net . 2019年4月5日閲覧
  143. ^ "PHP: rfc:permanent_hash_ext" . wiki.php.net . 2019年4月5日閲覧
  144. ^ "PHP: rfc:password_registry" . wiki.php.net . 2019年4月5日閲覧
  145. ^ "PHP: rfc:mb_str_split" . wiki.php.net . 2019年4月5日閲覧
  146. ^ "PHP: rfc:reference_reflection" . wiki.php.net . 2019年4月5日閲覧
  147. ^ "PHP: rfc:deprecate-and-remove-ext-wddx" . wiki.php.net . 2019年4月5日閲覧
  148. ^ "PHP: rfc:custom_object_serialization" . wiki.php.net . 2019年4月5日閲覧
  149. ^ 「PHP: サポートされているバージョン」 . php.net . 2023年11月26日閲覧
  150. ^ "PHP: rfc:jit" . wiki.php.net . 2019年4月5日閲覧
  151. ^ "PHP: rfc:negative_array_index" . wiki.php.net . 2019年4月5日閲覧
  152. ^ 「PHP RFC: 抽象特性メソッドの検証」 . wiki.php.net . 2020年8月14日閲覧
  153. ^ 「PHP RFC: 算術演算子/ビット演算子のより厳格な型チェック」 . wiki.php.net . 2020年8月14日閲覧
  154. ^ 「PHP RFC: エンジン警告の再分類」 . wiki.php.net . 2020年8月14日閲覧
  155. ^ "PHP: rfc:consistent_type_errors" . wiki.php.net . 2019年4月5日閲覧
  156. ^ 「PHP RFC: ロケールに依存しない浮動小数点数から文字列へのキャスト」 . wiki.php.net . 2020年8月14日閲覧
  157. ^ 「PHP RFC: 変数構文の調整」 . wiki.php.net . 2020年8月14日閲覧
  158. ^ 「PHP RFC: 属性 V2」 . wiki.php.net . 2020年8月14日閲覧
  159. ^ 「PHP RFC: 属性の修正」 . wiki.php.net . 2020年8月14日閲覧
  160. ^ 「PHP RFC: より短い属性構文」 . wiki.php.net . 2020年6月20日閲覧
  161. ^ 「PHP RFC: 属性構文の短縮化」 . wiki.php.net . 2020年8月14日閲覧
  162. ^ 「PHP RFC: 名前付き引数」 . wiki.php.net . 2020年8月14日閲覧
  163. ^ 「PHP RFC: マッチ式 v2」 . wiki.php.net . 2020年8月14日閲覧
  164. ^ 「PHP RFC: コンストラクタープロパティの昇格」 . wiki.php.net . 2020年8月14日閲覧
  165. ^ 「PHP RFC: Mixed Type v2」 . wiki.php.net . 2020年8月14日閲覧
  166. ^ 「PHP RFC: 静的戻り値の型」 . wiki.php.net . 2020年8月14日閲覧
  167. ^ 「PHP RFC: Nullsafe演算子」 . wiki.php.net . 2020年8月14日閲覧
  168. ^ 「PHP RFC: 非キャプチャキャッチ」 . wiki.php.net . 2020年8月14日閲覧
  169. ^ 「PHP RFC: throw式」 . wiki.php.net . 2020年8月14日閲覧
  170. ^ Andre, Tyson. 「PHP RFC: 常に利用可能なJSON拡張機能」 . PHP . 2020年10月25日閲覧
  171. ^ "PHP: todo:php81" . wiki.php.net 2022-06-16に取得
  172. ^ 「PHP RFC: 明示的な8進整数リテラル表記」 . wiki.php.net . 2020年11月25日閲覧。
  173. ^ 「PHP RFC: 列挙型」 . wiki.php.net . 2021年3月25日閲覧
  174. ^ "PHP: rfc:readonly_properties_v2" . wiki.php.net . 2021年11月26日閲覧
  175. ^ 「PHP: rfc:first_class_callable_syntax」 . wiki.php.net . 2021年11月26日閲覧
  176. ^ "PHP: rfc:new_in_initializers" . wiki.php.net . 2021年11月26日閲覧
  177. ^ "PHP: rfc:final_class_const" . wiki.php.net . 2021年11月26日閲覧
  178. ^ "PHP: rfc:fibers" . wiki.php.net . 2021年11月26日閲覧
  179. ^ "PHP: todo:php82" . wiki.php.net . 2022年6月16日閲覧
  180. ^ "PHP: rfc:readonly_classes" . wiki.php.net . 2022年6月16日閲覧
  181. ^ "PHP: rfc:strtolower-ascii" . wiki.php.net . 2022年6月16日閲覧
  182. ^ "PHP: rfc:constants_in_traits" . wiki.php.net . 2023年2月7日閲覧
  183. ^ “PHP 8.3.0 リリース!” . php.net . 2023年11月23日. 2023年11月24日閲覧
  184. ^ "PHP: rfc:typed_class_constants" . wiki.php.net . 2023年12月17日閲覧
  185. ^ "PHP: rfc:dynamic_class_constant_fetch" . wiki.php.net . 2023年12月17日閲覧
  186. ^ "PHP: rfc:readonly_amendments" . wiki.php.net . 2023年12月17日閲覧
  187. ^ "PHP: rfc:json_validate" . wiki.php.net . 2023年12月17日閲覧
  188. ^ "PHP: rfc:randomizer_additions" . wiki.php.net . 2023年12月17日閲覧
  189. ^ "PHP: todo: php84" . php.net . 2024年3月26日. 2024年3月26日閲覧
  190. ^ "PHP: todo: php85" . php.net . 2024年4月16日. 2025年4月16日閲覧
  191. ^ "PHP: rfc:pipe-operator-v3" . wiki.php.net . 2025年8月6日閲覧
  192. ^ a b「PHP: RFC:release_cycle_update」
  193. ^ 「PHP: サポートされていないブランチ」
  194. ^ a b c「ウェブサイトにおけるPHPの使用統計」 . W3Techs – World Wide Web Technology Surveys . W3Techs . 2025年12月20日閲覧
  195. ^ 「PHP: ElePHPant」 . 2014年10月4日. 2014年10月4日閲覧
  196. ^ 「リダイレクト中…」 . wwphp-fb.github.io .
  197. ^ 「PHPマスコットの誕生 - elePHPantの作者、Vincent Pontierが真実を明かす!」 7php.com 2014年1月6日
  198. ^ "ElePHPant" . PHP.earth . 2024年2月13日閲覧
  199. ^ 「PHP: ElePHPant」 . www.php.net .
  200. ^ 「ゾウのフィールドガイドafieldguidetoelephpants.net
  201. ^ a b "PHP: rfc:shortags" . php.net . 2008年4月3日. 2014年5月8日閲覧
  202. ^ 「PHP: 基本構文」 . PHPグループ. 2008年2月22日閲覧
  203. ^ 「基本コーディング標準」 . PHPフレームワーク相互運用性グループ. 2016年1月3日閲覧。
  204. ^ "echo – マニュアル" . php.net . 2014年2月17日閲覧
  205. ^ 「コアphp.iniディレクティブの説明 - マニュアル」 . php.net . 2002年3月17日. 2014年2月17日閲覧
  206. ^ 「PHP対応の最初のページ」 PHPグループ。 2008年2月25日閲覧
  207. ^ Bray, Tim; et al. (2008年11月26日). 「処理命令」 .拡張マークアップ言語 (XML) 1.0 (第5版) . W3C . 2009年6月18日閲覧
  208. ^ 「変数」 . PHPグループ. 2008年3月16日閲覧。
  209. ^ 「命令分離」 PHPグループ. 2008年3月16日閲覧。
  210. ^ 「コメント」 . PHPグループ. 2008年3月16日閲覧。
  211. ^ 「PHPにおける整数、ハサミによる実行、そして移植性」 MySQLパフォーマンスブログ、2007年3月27日。2007年3月28日閲覧
  212. ^ 「整数」 . PHPマニュアル. PHPグループ. 2025年5月26日閲覧
  213. ^ a b c d e「型」 . PHPグループ. 2008年3月16日閲覧。
  214. ^ 「文字列」 . PHPグループ. 2008年3月21日閲覧
  215. ^ "SPL – StandardPHPLibrary" . PHP.net . 2009年3月16日. 2009年3月16日閲覧
  216. ^ a b「ユーザー定義関数(PHPマニュアル)」 . php.net . 2014年7月4日. 2014年7月7日閲覧
  217. ^ a b「変数関数(PHPマニュアル)」 . php.net . 2014年7月4日. 2014年7月7日閲覧
  218. ^ "create_function() (PHPマニュアル)" . php.net . 2022年4月6日. 2022年5月4日閲覧
  219. ^ 「匿名関数(PHPマニュアル)」 . php.net . 2014年7月4日. 2014年7月7日閲覧
  220. ^ 「アロー関数(PHPマニュアル)」 . php.net . 2021年1月25日閲覧
  221. ^ Christian Seiler; Dmitry Stogov (2008年7月1日). 「Request for Comments: Lambda functions and closures」 . php.net . 2014年7月7日閲覧。
  222. ^ a b「PHP 5 オブジェクト参照」 . mjtsai.com . 2008年3月16日閲覧。
  223. ^ 「後方互換性のない変更」 . php-legacy-docs.zend.com . 2025年6月20日閲覧。
  224. ^ 「クラスとオブジェクト(PHP 5)」 PHPグループ。 2008年3月16日閲覧
  225. ^ 「オブジェクトの複製」 PHPグループ。 2008年3月16日閲覧
  226. ^ "Visibility (PHP Manual)" . theserverpages.com . 2005年5月19日. 2010年9月24日時点のオリジナルよりアーカイブ。 2010年8月26日閲覧
  227. ^ 「PHP: 可視性 - マニュアル」 . www.php.net . 2025年11月19日閲覧
  228. ^ 「コンピュータ言語はどのように機能するのか?」 2011年7月16日時点のオリジナルよりアーカイブ。 2009年11月4日閲覧
  229. ^ Gilmore, W. Jason (2006-01-23). PHPとMySQL 5入門:初心者からプロまで』Apress. p.  43. ISBN 1-59059-552-1
  230. ^ Julien Pauli、Nikita Popov、Anthony Ferrara. 「PHP Internals Book」 . PHP Internals Book . 2025年1月21日時点のオリジナルよりアーカイブ。 2025年1月21日閲覧
  231. ^ 「[投票] PHPディストリビューションへのZend Optimizer+の統合」news.php.net . 2013年3月8日閲覧
  232. ^ 「代替PHPキャッシュ」 PHP.net 2013年11月15日時点のオリジナルよりアーカイブ2013年9月21日閲覧。
  233. ^ 「私たちは98.5%(そして16%)です」『HipHop Virtual Machine』hhvm.com2013年12月。 2014年2月23日閲覧
  234. ^ 「PHP 5.6、7.0、7.1、7.2、7.3の決定版ベンチマーク(2019年)」 2019年1月14日。 2019年4月19日閲覧
  235. ^ Krill, Paul (2017年9月20日). 「PHPはもう古い!FacebookのHHVMエンジンはHackに切り替え」 InfoWorld . 2019年2月6日閲覧
  236. ^ 「GitHubでのHPHPcサポート削除のお知らせ」 . GitHub . 2013年5月24日閲覧。
  237. ^ 「PHPライセンス バージョン3.01」 。 2010年5月20日閲覧
  238. ^ 「GPL非互換のフリーソフトウェアライセンス」様々なライセンスとそれらに関するコメント。フリーソフトウェア財団2011年1月3日閲覧。
  239. ^ 「PHP: 関数とメソッドの一覧 - マニュアル」 PHPグループ。 2015年1月14日閲覧
  240. ^ "Introduction – Manual" . php.net . 2013年6月7日. 2013年6月13日閲覧
  241. ^ Darryl Patterson (2004年8月5日). 「PHP DataObjectsでビジネスロジックを簡素化 — O'Reilly Media」 . ibm.com . 2014年12月16日時点のオリジナルよりアーカイブ。 2014年12月16日閲覧
  242. ^ 「IBM — 米国」 。 2014年12月16日閲覧
  243. ^ 「PHPデータベースのよくある5つの問題」 ibm.com 2006年8月1日2013年6月13日閲覧
  244. ^ 「IBM Redbooks — IBMデータサーバー向けPHPアプリケーションの開発」redbooks.ibm.com . 2014年12月16日閲覧
  245. ^ 「php[architect] Magazine – PHPプログラマーのためのジャーナルwww.phparch.com
  246. ^ Krill, Paul (2005年10月19日). 「PHPが企業で普及、Javaとの競争に参入」 InfoWorld . 2014年7月13日時点のオリジナルよりアーカイブ
  247. ^ "Cross Reference: /PHP_5_4/ext/standard/" . php.net . 2012年3月16日時点のオリジナルよりアーカイブ。 2014年12月16日閲覧
  248. ^ 「カスタムPHP拡張機能の開発」 devnewz.com 2002年9月9日。2008年2月18日時点のオリジナルよりアーカイブ2008年2月25日閲覧。
  249. ^ 「入門:PHPで何ができるのか?」PHPマニュアル2009年2月16日時点のオリジナルよりアーカイブ2009年3月5日閲覧。
  250. ^ 「Helicopter: PHP経由でParrot AR Droneを制御できるnode-ar-droneの移植版」 JoliCode、2019年1月11日。 2019年2月23日閲覧
  251. ^ 「なぜZephirなのか?」 zephir-lang.com 2015年10月20日2015年12月14日閲覧
  252. ^ 「PHPクレジット」 。 2018年12月16日閲覧
  253. ^ 「PHPトレーニングとPHP認定資格でPHPを学ぶ」 www.zend.com . 2020年11月16日閲覧
  254. ^ Walker, James (2021年12月13日). 「新しいPHP FoundationがPHPの将来にもたらす意味」 How -To Geek . 2023年11月26日閲覧
  255. ^ 「PHPの新生活 – PHP Foundation | PhpStormブログ」 . JetBrainsブログ. 2021年11月22日. 2022年6月16日閲覧
  256. ^ 「PHP Foundation:インパクトと透明性レポート2022」thephp.foundation . 2023年11月27日閲覧
  257. ^ Pronskiy, Roman (2024年2月26日). 「PHP財団:インパクトと透明性レポート2023」 PHP財団. 2024年4月1日閲覧
  258. ^ Pronskiy, Roman (2025年3月31日). 「PHP財団:インパクトと透明性レポート2023」 . PHP財団. 2025年8月19日閲覧。
  259. ^アンダーソン、ティム。「コア開発者への資金提供を目的としてPHP Foundationが設立」 www.theregister.com 2023年12月5日閲覧
  260. ^ 「PHP Foundation:PHPの新時代」JetBrainsブログJetBrains、2021年11月26日。 2025年10月6日閲覧
  261. ^ Claburn, Thomas (2021年11月26日). 「PHP Foundationがオープンソース言語のサポートのために設立」 . The Register . 2025年10月6日閲覧
  262. ^ "PHP" . Sovereign Tech Fund . 2024年5月26日閲覧。
  263. ^ a b「一般的なインストールの考慮事項」 . php.net . 2013年9月22日閲覧
  264. ^ 「ニュースアーカイブ: PHP 5.3.3 リリース!」 . php.net . 2010-07-22.
  265. ^ 「FastCGI Process Manager (FPM)」 . php.net . 2013年9月22日閲覧
  266. ^ 「コマンドラインの使い方:概要」 . php.net . 2021年3月21日時点のオリジナルよりアーカイブ。 2013年9月22日閲覧
  267. ^ 「コマンドラインの使用法:他のSAPIとの違い」 . php.net . 2013年9月22日閲覧
  268. ^ a b「一般的なインストールの考慮事項」 . php.net . 2013年9月22日閲覧
  269. ^ 「PHP: Microsoft Windows上のApache 2.x」 . php.net . 2013年9月26日時点のオリジナルよりアーカイブ2013年9月22日閲覧。
  270. ^ 「コマンドラインの使い方:概要」 . php.net . 2021年3月21日時点のオリジナルよりアーカイブ。 2013年9月22日閲覧
  271. ^ 「PHP-GTK 2のインストール」 . php.net . 2013年12月12日時点のオリジナルよりアーカイブ2013年9月22日閲覧。
  272. ^ Vinit Sharma. 「クラウドコンピューティングとは? | PHPをAWSに統合する方法」クラリオンテクノロジーズ2025年12月6日閲覧{{cite web}}: CS1 maint: url-status (リンク)
  273. ^ 「AWS SDK for PHP」 . aws.amazon.com . 2014年3月6日閲覧
  274. ^ 「Windows Azure SDK for PHP — Interoperability Bridges and Labs Center」 . interoperabilitybridges.com . 2014年3月20日時点のオリジナルよりアーカイブ。 2014年3月6日閲覧
  275. ^ 「ランタイム設定:目次」 . php.net . 2013年9月22日閲覧
  276. ^ 「php.ini ディレクティブ: php.ini ディレクティブのリスト」 . php.net . 2013年9月22日閲覧
  277. ^ 「実行時設定:設定ファイル」 . PHP.net . 2013年9月22日閲覧
  278. ^ "php.ini ディレクティブ: php.ini セクションのリスト" . PHP.net 2013 年 9 月 22 日に取得
  279. ^ 「実行時設定:設定項目を設定できる場所」 PHP.net . 2013年9月22日閲覧
  280. ^ 「PHPマニュアル 画像処理とGD」 . php.net . 2011年4月9日閲覧
  281. ^ 「PHP サーバーサイドスクリプト言語」インディアナ大学2007年4月4日. 2016年1月21日時点のオリジナルよりアーカイブ。 2008年2月25日閲覧
  282. ^ 「JavaServer Pagesテクノロジー - JavaServer Pagesによるサーバー側動的コンテンツ作成方法の比較ホワイトペーパー」 Sun Microsystems . 2008年2月25日閲覧
  283. ^ 「LAMPアプリケーションをチューニングする5つの簡単な方法」 IBM 2011年1月25日
  284. ^ 「PHPの核:拡張機能の構造」PHP.net2013年9月26日時点のオリジナルよりアーカイブ2013年9月22日閲覧。
  285. ^ 「PHPの核心:"counter"拡張モジュール - 継続的な例」PHP.net2013年9月26日時点のオリジナルよりアーカイブ。 2013年9月22日閲覧
  286. ^ 「拡張機能の作成 パート1:PHPとZendの紹介」Zend Technologies . 2005年3月1日. 2013年9月24日時点のオリジナルよりアーカイブ2013年9月22日閲覧。
  287. ^ 「拡張機能の書き方 パートII:パラメータ、配列、ZVAL」 . Zend Technologies . 2005年6月6日. 2013年9月26日時点のオリジナルよりアーカイブ。 2013年9月22日閲覧
  288. ^ 「拡張機能の書き方 パートII:パラメータ、配列、ZVAL(続)」 Zend Technologies . 2005年6月6日. 2013年9月26日時点のオリジナルよりアーカイブ。 2013年9月22日閲覧
  289. ^ 「拡張機能の作成 パートIII: リソース」 . Zend Technologies . 2006年5月12日. 2013年9月26日時点のオリジナルよりアーカイブ。 2013年9月22日閲覧
  290. ^ 「PHP拡張機能でC++クラスをラップする」 Zend Technologies . 2009年4月22日. 2013年9月20日時点のオリジナルよりアーカイブ2013年9月22日閲覧。
  291. ^ 「PHPをC++で拡張する?」Stack Overflow2013年9月22日閲覧
  292. ^ 「C++コードを使ってPHPとやりとりするにはどうすればいいですか?」 Stack Overflow 。 2013年9月22日閲覧
  293. ^ゴレモン、サラ (2006). PHPの拡張と埋め込み. サムズ. ISBN 978-0-672-32704-9
  294. ^ 「リクエスト #46919: マルチスレッド」 . PHP.net . 2013年9月22日閲覧。
  295. ^ "pthreads: はじめに (PHPマニュアル)" . PHP.net . 2013年9月22日閲覧
  296. ^ "PECL :: Package :: pthreads" . pecl.php.net . 2014年2月9日閲覧
  297. ^ "マニュアル:インストール要件#PHP" .メディアウィキ。 2010-01-25 2010 年 2 月 26 日に取得PHP は MediaWiki が書かれているプログラミング言語です [...]
  298. ^ 「WordPressについて」 。 2010年2月26日閲覧。WordPressは[...]PHPで構築されました。
  299. ^ Kempkens, Alex. 「Joomla! — ウェブサイトとアプリを構築するためのコンテンツ管理システム
  300. ^ 「PHPとDrupal」 Drupal.org、2007年9月16日。2010年2月8日時点のオリジナルよりアーカイブ2010年6月13日閲覧。
  301. ^ 「About」 . Moodle.org. 2010年1月11日時点のオリジナルよりアーカイブ2009年12月20日閲覧。
  302. ^ 「SilverStripeのサーバー要件」 。 2014年11月28日時点のオリジナルよりアーカイブ2014年10月13日閲覧。SilverStripeにはPHP 5.3.2以上が必要です。
  303. ^ Ide, Andy (2013年1月31日). 「PHPはどんどん成長していく」 . 2013年4月1日閲覧
  304. ^ 「ウェブサイトにおけるPHPバージョン4の使用統計と市場シェア、2025年12月。w3techs.com
  305. ^ 「ウェブサイトにおけるPHPバージョン5の使用統計と市場シェア、2025年12月。w3techs.com
  306. ^ 「ウェブサイトにおけるPHPバージョン7の使用統計と市場シェア、2025年12月。w3techs.com
  307. ^ 「ウェブサイトにおけるPHPバージョン8の使用統計と市場シェア、2025年12月。w3techs.com
  308. ^ 「National Vulnerability Database (NVD) 検索脆弱性統計」 。 2019年11月22日閲覧
  309. ^ 「PHP関連の脆弱性(National Vulnerability Database)」 2012年7月5日. 2009年6月28日時点のオリジナルよりアーカイブ。 2013年4月1日閲覧
  310. ^ 「開発者ミーティングノート、2005年11月」
  311. ^ 「Taint mode decision, November 2007」 。2009年2月26日時点のオリジナルよりアーカイブ
  312. ^ "PHP: rfc:taint" . wiki.php.net .
  313. ^ 「Hardened-PHP Project」 . 2008年8月15日. 2019年2月24日時点のオリジナルよりアーカイブ2019年8月22日閲覧。
  314. ^ 「スナッフルパガスのドキュメント」
  315. ^ 「セキュリティ:グローバルレジスタの使用」 . PHPマニュアル. PHP.net. 2013年9月27日時点のオリジナルよりアーカイブ。 2013年9月22日閲覧
  316. ^ 「マジッククォート」 . PHPマニュアル. PHP.net. 2014年2月8日時点のオリジナルよりアーカイブ2014年1月17日閲覧。
  317. ^ "「'engine'設定ディレクティブ」。PHP : ランタイム設定。PHP.net 。 2014年2月13日取得
  318. ^ 「PHPのGIF画像を使ったセキュリティエクスプロイト」 2007年6月22日。2013年9月27日時点のオリジナルよりアーカイブ2013年9月22日閲覧。
  319. ^ 「GIF画像を使ったPHPのセキュリティエクスプロイト」 PHP Classesブログ。2007年6月20日。 2013年9月22日閲覧
  320. ^ 「getimagesize() を通じて悪意のある PHP を渡す」 2007年6月4日. 2013年9月21日時点のオリジナルよりアーカイブ。 2013年9月22日閲覧
  321. ^ "「'enable_dl' 設定ディレクティブ」。PHP : ランタイム設定。PHP.net 。 2014年2月13日取得
  322. ^ 「PHP関数リファレンス: dl()」 . PHP.net . 2013年9月22日閲覧
  323. ^ 「私のホストはトロイの木馬を修正してくれません」。WebHosting Talk 2013年9月22日閲覧。
  324. ^ Raz0r (2013年1月25日). 「Simple Machines Forum <= 2.0.3 管理者パスワードリセット」 . Raz0R.name — Webアプリケーションセキュリティ.{{cite news}}: CS1 maint: 数値名: 著者リスト (リンク)
  325. ^ニブルセキュリティ。「TYPO3-SA-2010-020、TYPO3-SA-2010-022の説明」
  326. ^ "Криптостойкость и небезопасное сравнение" . ahack.ru (ロシア語)。 2017年7月4日のオリジナルからアーカイブ。
  327. ^ Krawczyk, Pawel (2013). 「Webアプリケーションに対する最も一般的な攻撃」 . IPSec.pl. 2015年4月15日時点のオリジナルよりアーカイブ。 2015年4月15日閲覧
  328. ^ Krawczyk, Pawel (2013). 「では、最も重大なアプリケーションの欠陥とは? 新しいOWASP Top 10について」 . IPSec.pl . 2015年4月15日閲覧
  329. ^ 「PHP: Rand – マニュアル」
  330. ^ 「PHP: Mt_rand - マニュアル」
  331. ^ 「PHP: Random_int – マニュアル」
  332. ^ Argyros, George; Kiayias, Aggelos (2012年8月10日). 「パスワードを忘れた場合:PHPアプリケーションに対するランダムネス攻撃」 . usenix.org . USENIX . 2024年4月19日閲覧
  333. ^ 「PHP 7.2~8.0のPHPサポート | PHP LTS | Zend by Perforce」 。 2024年5月23日閲覧
  334. ^ 「Pagely PHP 長期サポートページ」 . Pagely . 2024年9月14日閲覧

さらに読む