php cli和php cgi有什么区别?

use*_*865 35 php

一个非常基本的问题.我只是发现了两个可执行文件php-cgi.exe,并php.exe在我的笔记本电脑WAMP服务器的bin文件夹.我正在学习PHP,无法找出差异.他们之间有什么区别?

Abd*_*ira 43

来自http://www.php-cli.com/php-cli-cgi.shtml

这些是CLI和CGI之间最重要的区别:

  • 与CGI SAPI不同,CLI默认情况下不向输出写入标头
  • 有一些php.ini指令被CLI SAPI覆盖,因为它们在shell环境中没有意义:
    • html_errors:CLI默认值为FALSE
    • implicit_flush:CLI默认值为TRUE
    • max_execution_time:CLI默认值为0(无限制)
    • register_argc_argv:CLI默认值为TRUE
  • 您可以在脚本中使用命令行参数!变量"$ argc"为您提供了传递给应用程序的许多参数.数组"$ argv"为您提供了一组实际参数
  • 为shell环境定义了3个新常量:STDIN,STDOUT,STDERR.它们都是相应shell设备的文件处理程序.例如,STDIN是fopen的处理程序('php:// stdin','r').所以,你可以像这样从STDIN读取一行:$ strLine = trim(fgets(STDIN));. PHP CLI已经为您定义了STDIN!
  • PHP CLI不会将当前目录更改为已执行脚本的目录.该脚本的当前目录将是您输入PHP CLI命令的目录.
  • PHP CLI有许多可用的USEFUL选项.这将允许您获得有关您的PHP设置,您的PHP脚本或以不同模式运行它的一些有价值的信息.
  • 在PHP 5中,CLI和CGI文件名有一些变化.在PHP 5中,CGI版本重命名为php-cgi.exe(以前是php.exe),CLI版本现在位于主目录(以前的cli/php.exe)中.
  • 在PHP 5中它还引入了一种新模式:php-win.exe.这与CLI版本相同,只是php-win不输出任何内容,因此不提供控制台(屏幕上不显示"dos box").此行为类似于PHP GTK.

  • 是肯定的.在CLI max_execution_time中:默认值为0(无限制). (3认同)

Mah*_*alt 28

这可能会让您更广泛地了解它们之间的差异:

CGI :(公共网关接口)它是用于在Web服务器和CGI程序之间传输信息的规范"协议".

CGI程序是任何旨在接受和返回符合CGI规范的数据的程序.

基本上,这是一种在HTTP请求到来时运行服务器端脚本(PHP,Perl,Python,...)的方法.

与其他替代方案相比,CGI非常缓慢.


FastCGI:是一个更好的CGI.

快速CGI是一种不同的方法,结果更快.

这是一个只有少数扩展的CGI.

FastCGI实现不再可用,支持PHP-FPM.


PHP-FPM:(FastCGI Process Manager),它比旧的FastCGI更好的FastCGI实现.

它作为独立的FastCGI服务器运行.

通常,它是Web服务器(Apache,Nginx ..)的PHP接口,允许Web Server与PHP交互.

PHP-CLI不同,后者是PHP的命令行界面,允许用户通过终端与PHP进行交互.


mod_php:运行PHP的Apache模块.

它直接在Web服务器中执行PHP脚本,作为Web服务器的一部分,而无需与CGI程序通信.


mod_SuPHP:类似于mod_php,但可以更改进程运行的用户/组.

基本上它解决了与权限相关的mod_php的一些问题.


Bri*_*oll 17

PHP CLI是PHP的命令行界面(例如,用于创建独立应用程序)
PHP CGI是PHP的通用网关接口(例如,用于Web应用程序)

  • PHP是Php Hypertext预处理器.这真的是一个答案吗?!我不这么认为 (40认同)

Nie*_*sol 16

php-cgi适用于网络服务器.除此之外,它还为您处理HTTP标头.

CLI版本旨在在命令行上运行(因此"命令行界面").这个不处理标题或任何其他服务器相关的东西.


Kav*_*gel 7

CLI用于命令行脚本,CGI用于Web请求


Pow*_*ord 7

php-cli用于在命令行上运行PHP. php-cgi为您做其他事情,例如HTTP标头和某些安全性修改.

话虽如此,考虑安装FastCGI模块并使用PHP的FastCGI接口.这应该比php-cgi快得多地运行PHP.我相信标准的Apache FastCGI模块是mod_fcgid.