検索

PHP 実行モード

SAPI

ここで説明する PHP 実行モードは、実際には SAPI (サーバー アプリケーション プログラミング インターフェイス、サーバー アプリケーション プログラミング ポート) を指します。 SAPI は、PHP が外部と通信するためのインターフェイスを提供しており、PHP はこのインターフェイスを使用して他のアプリケーションと対話します。さまざまなアプリケーション シナリオに合わせて、PHP はさまざまな SAPI も提供しています。一般的な SAPI には、apache、apache2filter、apache2handler、cli、cgi、embed、fast-cgi、isapi などがあります。

PHP 動作モードの詳細な概要

php_sapi_name() — Web サーバーと PHP の間のインターフェイスのタイプを返します。考えられる戻り値には、aolserver、apache、apache2filter、apache2handler、caudium、cgi (PHP 5.3 まで)、cgi-fcgi、cli、cli-server、continuity、embed、fpm-fcgi、isapi、litespeed、milter、nsapi、phttpd が含まれます。 、pi3web、roxen、thttpd、tux、webjames。

PHP に組み込まれている SAPI 実装の多くは、もはや保守されていないか、主流ではなくなっています。PHP コミュニティは現在、一部の SAPI をコード ベースから移動することを検討しています。コミュニティでは、本当に必要な場合、または一部の機能がほぼ普遍的な場合を除き、多くの機能が PECL ライブラリに含まれていると考えています。

次に、より一般的な 5 つの動作モードについて説明します。

CLI モード

CLI (コマンド ライン インターフェイス)、コマンド ライン インターフェイス、PHP がデフォルトでインストールされます。このインターフェイスを通じて、シェル環境で PHP と対話できます。ターミナルに php -v と入力すると、次の図のような結果が表示されます (PHP がインストールされていると仮定します):

PHP 動作モードの詳細な概要

CLI の存在により、WEB サーバーに依存せずに、シェルや Python を使用するのと同じように、ターミナルのコマンド ラインで PHP スクリプトを直接実行できます。たとえば、Laravel フレームワークの Artisan コマンド ライン ツールは、実際には、Laravel アプリケーションを迅速に構築するために使用される PHP スクリプトです。

CGI モード

CGI (Common Gateway Interface、Common Gateway Interface) は、クライアントが Web ブラウザからネットワーク サーバー上で実行されているプログラムにアクセスしてデータを要求できるようにする重要なインターネット テクノロジです。 CGI は、サーバーとリクエスト ハンドラーの間でデータを転送するための標準を記述しています。

WEBサーバーは単なるコンテンツの配信者です。たとえば、Nginx の場合、クライアントが /index.html をリクエストした場合、Nginx はファイル システム内でこのファイルを見つけてブラウザに送信します。ここで配布されるのは静的データです。クライアントがリクエストした場合/index.php によると、設定ファイルによれば、Nginx はこれが静的ファイルではなく、PHP パーサーによって処理される必要があることを認識しているため、単純な処理の後にリクエストを PHP パーサーに渡します。 Nginx はどのようなデータを PHP パーサーに渡しますか? URL が存在する必要があり、クエリ文字列が存在する必要があり、POST データが存在する必要があり、HTTP リクエスト ヘッダーが欠落していてはなりません。CGI は、どのようなデータをどのような形式で送信するかを規定するプロトコルです。リクエストを処理するためにバックエンドに渡されます。

CGI モードの動作原理: Nginx がブラウザ /index.php からリクエストを受信すると、まず CGI プロトコルに対応するプロセスを作成します。ここでは php-cgi (PHP パーサー) )。次に、php-cgi は php.ini ファイルを解析し、実行環境を初期化し、リクエストを処理し、処理結果を CGI で指定された形式で返し、プロセスを終了します。最後に、Nginx は結果をブラウザーに返します。プロセス全体は Fork-And-Execute パターンです。ユーザーリクエストの数が非常に多い場合、メモリやCPU時間などのシステムリソースが大量に占有され、パフォーマンスが低下します。したがって、CGI を使用するサーバーでは、接続要求の数と同じ数の CGI サブプロセスが存在することになり、サブプロセスの繰り返しロードが CGI のパフォーマンスを低下させる主な原因となります。

PHP 動作モードの詳細な概要

#CGI モードの利点は、どのサーバーからも完全に独立しており、仲介としてのみ機能することです。Web サーバーとスクリプト言語へのインターフェイスを提供するか、完全に独立しています。プログラミング言語。これらは CGI プロトコルを通じて接続され、データ転送を完了します。この利点は、それらの間の相関関係を最小限に抑え、それぞれをより独立させ、互いに独立させることです。

CGI モードはすでに比較的古いモードであり、近年ではほとんど使用されていません。

FastCGI モード

FastCGI (Fast Common Gateway Interface、Fast Common Gateway Interface) は、対話型プログラムが Web サーバーと通信できるようにするプロトコルです。 FastCGI は、以前の Common Gateway Interface (CGI) の拡張バージョンです。 FastCGI は、サーバーが同時により多くの Web ページ要求を処理できるように、Web サーバーと CGI プログラム間の対話オーバーヘッドを削減することに取り組んでいます。

定義によれば、FastCGI もプロトコルです。FastCGI プロトコルを実装するプログラムは、常駐 (長寿命) CGI プロトコル プログラムに似ています。アクティブ化されている限り、いつでも実行できます。 . 毎回フォークするのに時間はかかりません。

FastCGI モードの動作原理: FastCGI プロセス マネージャーが開始されると、最初に php.ini ファイルが解析され、実行環境が初期化され、次に複数の CGI プロトコル インタープリター デーモンが開始されます (複数の CGI プロトコル インタープリター デーモンを起動することもできます)。プロセス管理 php-cig または php-cgi.exe で見られる) を実行し、WEB サーバーからの接続を待ちます。クライアント要求が WEB サーバーに到達すると、FastCGI プロセス マネージャーは CGI インタープリターを選択して接続し、WEB サーバーに接続します。サーバーは CGI 環境変数と標準入力を FastCGI のサブプロセス php-cgi に送信し、php-cgi サブプロセスが処理を完了した後、標準出力とエラー情報を WEB サーバーに返します。を実行すると、php-cgi サブプロセスが接続を閉じ、リクエストが処理されます。その後、引き続き待機して、FastCGI プロセス マネージャーからの次のリクエスト接続を処理します。

PHP 動作モードの詳細な概要

FastCGI モードは C/S 構造を採用しており、WEB サーバーとスクリプト解析サーバーを分離し、スクリプト解析サーバー上で 1 つ以上のスクリプト解析デーモンを起動できます。同じ時間です。 WEB サーバーが動的プログラムに遭遇するたびに、それを FastCGI プロセスに直接配信して実行し、その結果をブラウザーに返すことができます。この方法により、WEB サーバーは静的リクエストを排他的に処理したり、動的スクリプト サーバーの結果をクライアントに返すことができるため、アプリケーション システム全体のパフォーマンスが大幅に向上します。

さらに、CGI モードでは、php-cgi が php.ini 設定を変更した後、新しい php-ini 設定を有効にするために php-cgi プロセスを再起動する必要があり、スムーズな再起動は不可能です。 。 FastCGI モードでは、PHP-FPM は新しい子プロセスを生成することで、php.ini の変更後にスムーズな再起動を実現できます。

PHP-FPM (PHP-FastCGI Process Manager) は、PHP 言語で FastCGI プロトコルを実装するプロセス マネージャーです。Andrei Nigmatulin によって作成および実装されました。PHP に正式に組み込まれ、カーネル。

FastCGI モードの利点:

  • 安定性の観点から、FastCGI モードは独立したプロセス プールを使用して CGI プロトコル プログラムを実行します。システム 簡単に破棄して、新しいプロセスに再割り当てしてロジックを実行できます。

  • セキュリティの観点から、FastCGI モードは分散コンピューティングをサポートしています。 FastCGI プログラムはホストサーバーから完全に独立しており、FastCGI プログラムがハングアップしてもサーバーには影響せず、IO 処理はホストサーバーに任せられるため、ホストサーバーは集中的に IO を処理できます。動的 Web ページでは、論理処理の一部のみが存在し、多数の静止画像などが存在する可能性があります。

  • FastCGI モードは現在 PHP の主流の WEB サービス動作モードであり、効率的で信頼性の高いパフォーマンスを備えており、誰でも使用することをお勧めします。

モジュール モードPHP は、多くの場合、Apache サーバーと組み合わせて、LAMP をサポートするオペレーティング環境を形成します。 PHP をサブモジュールとして Apache に統合するのがモジュール モードです。Apache の一般的な構成は次のとおりです:

LoadModule php5_module modules/mod_php5.so

これは

LoadModule

コマンドを使用します。コマンドの最初のパラメータはモジュールです。名前はモジュール実装のソース コードで確認できます。 2 番目のオプションは、モジュールが配置されているパスです。サーバーの実行中にモジュールをロードする必要がある場合は、シグナル

HUP

または AP_SIG_GRACEFUL をサーバーに送信できます。シグナルが受信されると、Apache は再起動せずにモジュールをリロードします。サーバー。 apache2 の ap_hook_post_config フックに登録すると、Apache が PHP ファイルのリクエストの受け入れを開始するときにこのモジュールが開始されます。 たとえば、クライアントが PHP ファイルにアクセスすると、Apache は php5_module を呼び出して PHP スクリプトを解析します。 Apache はリクエストを受信するたびに、PHP に接続してリクエストを完了するプロセスを作成します。モジュール モードでは、PHP がモジュールとして Apache にコンパイルされる場合があるため、問題が PHP と Apache のどちらで発生しているかを判断することが困難になります。

かつては、豊富なモジュールと機能を備えた Apache を企業が WEB サーバーとして使用することが多く、モジュール モードで実行される PHP と Apache の組み合わせが非常に一般的でした。近年、非同期イベント駆動型の高性能 Nginx サーバーの台頭により、市場シェアが急速に拡大しており、FastCGI モードで動作する PHP Nginx の組み合わせのパフォーマンスが向上し、Apache に追いつく傾向にあります。

ISAPI モード

ISAPI (Internet Server Application Program Interface) は、Microsoft が提供するインターネット サービス用の API インターフェイスのセットです。ISAPI DLL は、ユーザーの要求によってアクティブ化された後、メモリ内に常駐できます。 、ユーザーからの次のリクエストを待つ、複数のユーザーリクエスト処理関数を1つのDLLに設定できることに加え、ISAPI DLLアプリケーションとWEBサーバーが同一プロセス内にあるため、CGIに比べて大幅に効率が高くなります。 Microsoft の独占権により、Windows 環境でのみ実行できます。

はめったに使用されないため、ここでは詳しく紹介しません。

推奨学習: 「PHP ビデオ チュートリアル

以上がPHP 動作モードの詳細な概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はsegmentfaultで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么查找字符串是第几位php怎么查找字符串是第几位Apr 22, 2022 pm 06:48 PM

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、