違い: CLI はコマンド ライン実行モード、つまりコンソールまたはシェルにコマンドを入力して PHP スクリプト コードを実行することを指しますが、CGI はパブリック ゲートウェイ インターフェイスの実行モードであり、Apache がこのモードに遭遇したときに発生します。 PHP スクリプト PHP プログラムは解釈のために CGI アプリケーション (php-cgi.exe) に送信され、解釈後の結果は Apache に返され、その後対応する要求ユーザーに返されます。
このチュートリアルの動作環境: Windows7 システム、PHP8 バージョン、DELL G3 コンピューター
PHP は Apache サーバー上で正常に実行できますか? PHP の実行方法を構成する方法を見てみましょう。これまでのところ、PHP を実行する主な方法は 3 つあります。
mod_php、モジュールの読み込みによって実行する (初心者にとっては理解しにくいかもしれません)、実際に PHP を Apache サーバーに統合して実行します同じプロセスで実行します。
CGI, CGI モードで実行します。CGI は英語でパブリック ゲートウェイ インターフェイスと呼ばれます。Apache が PHP スクリプトを検出すると、PHP プログラムを CGI アプリケーションに送信します ( php -cgi.exe)、解釈された結果は Apache に返され、その後、対応する要求ユーザーに返されます。
FastCGI、FastCGI モードで実行されます。この形式は CGI の拡張バージョンです。CGI は単一プロセス、マルチスレッドの実行方法です。プログラムは実行後に破棄されるため、フォークして実行するたびに構成変数と環境変数をロードする必要があります (create-実行する)。 FastCGI は異なります。FastCGI は長寿命 CGI のようなもので、常に実行でき、起動していれば毎回 fork する手間がかかりません。 FastCGI プロセス マネージャーは自身を初期化し、複数の CGI インタープリター プロセス (タスク マネージャーに表示される複数の php-cgi.exe) を開始し、Web サーバーからの接続を待ちます。
CLI: これはコマンド ラインです。たとえば、コンソールまたはシェルにコマンド
php -f index.php
を入力すると、出力
コマンドラインインターフェイス (英語: コマンドラインインターフェイス、省略形: CLI) は グラフィカル ユーザー インターフェイス普及する前は最も広く使用されていた ユーザー インターフェイスですが、通常は マウスをサポートしていません。ユーザーはキーボードから指示を入力し、コンピューターはそのコマンドを実行します。指示を受け取った後。 Character User Interface (CUI) と呼ぶ人もいます。 一般に、コマンド ライン インターフェイス (CLI) は、グラフィカル ユーザー インターフェイス (GUI) ほどユーザーの操作に便利ではないと考えられています。コマンド ライン インターフェイス ソフトウェアは通常、ユーザーが操作コマンドを記憶する必要があるため、その特性により、コマンド ライン インターフェイスはグラフィカル ユーザー インターフェイスに比べてコンピューター システムのリソースを節約します。コマンドを覚えるという前提の下では、多くの場合、グラフィカル ユーザー インターフェイスを使用するよりもコマンド ライン インターフェイスを使用した方が高速です。したがって、グラフィカル ユーザー インターフェイスを備えたオペレーティング システムでは、オプションのコマンド ライン インターフェイスが保持されます。
CGI モードで実行します。CGI は英語でパブリック ゲートウェイ インターフェイスと呼ばれます。Apache は、PHP スクリプトに遭遇すると、PHP プログラムを CGI に送信します。アプリケーション (php-cgi.exe) が解釈し、解釈された結果が Apache に返され、その後、対応する要求ユーザーに返されます。
CGI 是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。CGI 应用程序能与浏览器进行交互,还可通过数据库API 与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。几乎所有服务器都支持CGI,可用任何语言编写CGI,包括流行的C、C ++、VB 和Delphi 等。CGI 分为标准CGI 和间接CGI两种。标准CGI 使用命令行参数或环境变量表示服务器的详细请求,服务器与浏览器通信采用标准输入输出方式。间接CGI 又称缓冲CGI,在CGI 程序和CGI 接口之间插入一个缓冲程序,缓冲程序与CGI 接口间用标准输入输出进行通信。
公共网关接口”(Common Gateway Interface),HTTP服务器 与你的或其它机器上的程序 进行 “交谈”的一种工具 ,其程序 须运行在网络 服务器 上。在服务器 环境中,为“程序 ”提供标准 的接口,通过这个接口,“程序 ”可以对服务器 与客户端 交换的信息 做一些事情 。“程序 ”的语 言并没有要求。程序 对接口进行 操作。服务器 要支持 CGI就要提供CGI中要求的环境变量 ,或者还有别的。
个人理解:CGI规定了php与web server交流的规则,相当于执行了response = exec("php -f index.php -url=xxx -cookie=xxx -xxx=xxx")。
以FastCGI的方式运行。这种形式是CGI的加强版本,CGI是单进程,多线程的运行方式,程序执行完成之后就会销毁,所以每次都需要加载配置和环境变量fork-and-execute(创建-执行)。而FastCGI则不同,FastCGI 像是一个常驻 (long-live) 型的 CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去 fork 一次。FastCGI进程管理器自身初始化,启动多个CGI解释器进程 (在任务管理器中可见多个php-cgi.exe)并等待来自Web Server的连接。
以模块加载的方式运行,初学者可能不容易理解,其实就是将PHP集成到Apache服务器,以同一个进程运行。
cgi的方式运行,需要做如下的配置php配置文件
cgi.force_redirect = 0 //本来是 1 并且去掉注释符号;
修改apache的配置,去掉原来的模块配置
AddType application/x-httpd-php .php LoadModule php5_module "C:/php5/php5apache2_2.dll" PHPinidir "C:/php5/php.ini"
最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html。事物总是不 断发展,网站也越来越复杂,所以出现动态技术。但是服务器并不能直接运行 php,asp这样的文件,自己不能做,外包给别人吧,但是要与第三做个约定,我给你什么,然后你给我什么,就是握把请求参数发送给你,然后我接收你的处 理结果给客户端。那这个约定就是 common gateway interface,简称cgi。这个协议可以用vb,c,php,python 来实现。cgi只是接口协议,根本不是什么语言。下面图可以看到流程
推荐学习:《PHP视频教程》
以上がPHPのcliとcgiの実行モードの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。