2012-02-16 101 views
21

对你来说一个非常基本的问题。我在笔记本电脑上的WAMP服务器的bin文件夹中发现了两个可执行文件php-cgi.exephp.exe。我正在学习PHP,无法找出差异。他们之间有什么不同?php cli和php cgi有什么区别?

+1

[从命令行执行php和从http端执行php之间的区别](http://stackoverflow.com/questions/3016281/difference-between-executing-php-from-the-commandline-and-from -http端) – mario 2012-02-16 17:12:02

+0

@mario你怎么找到重复?我找不到任何重复。 – user1208865 2012-02-16 17:18:17

回答

15

PHP CLI为PHP命令行接口(例如,用于创建独立的应用程序)
PHP CGI是PHP的公共网关接口(例如,用于web应用)

+18

并且PHP是Php超文本预处理器。这真的是一个答案吗?!我不这么认为 – Trix 2016-06-21 10:47:15

4

CLI为命令行脚本,CGI用于网络请求

13

php-cgi适用于网络服务器。除其他外,它为您处理HTTP标头。

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

3

php-cli用于在命令行上运行PHP。 php-cgi会为您做额外的事情,例如HTTP标头和某些安全修改。

话虽如此,请考虑安装FastCGI模块并使用PHP's FastCGI interface。这应该比php-cgi更快地运行PHP。我相信标准的Apache FastCGI模块是​​。

28

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”为您提供了一个实际的 参数数组
  • 有3个新的常量为shell环境定义: STDIN,STDOUT,STDERR。它们都是 记者外壳设备的文件处理程序。例如STDIN是 fopen('php:// stdin','r')的处理程序。因此,你可以从STDIN中读取一行,如 :$ strLine = trim(fgets(STDIN));. STDIN已通过PHP CLI定义为 !
  • PHP CLI不会将当前目录更改为执行脚本的 目录。该脚本的当前目录将为您的类型PHP CLI命令所在的目录 。
  • PHP CLI有很多有用的选项可用。其中 允许你得到一些有关你的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框”)。 此行为与PHP GTK类似。
+0

你好,你知道它是否有一些超时?我的意思是如果需要运行花费太长时间运行的脚本。在CLI上运行它是一个很好的选择吗? – 2016-01-22 12:22:09

+1

是的,当然。在CLI中max_execution_time:默认为0(无限制)。 – 2016-01-25 15:19:59

6

这可能给你他们的差异更广泛的理解:

CGI:(通用网关接口),它是一种规范“协议”的Web服务器和CGI程序之间传送信息。

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

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

与其他选择相比,CGI速度非常慢。


的FastCGI:是一个更好的CGI。

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

这是一个只有几个扩展名的CGI。

FastCGI的实现不再支持PHP-FPM。


PHP-FPM:(FastCGI进程管理器),它比旧的FastCGI更好的FastCGI实现。

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

一般来说,它是用于Web服务器(Apache,Nginx ..)的PHP接口,允许Web Server与PHP进行交互。

不像PHP-CLI这是PHP的命令行界面,允许用户通过终端与PHP进行交互。


mod_php的: Apache模块运行PHP。

它直接作为Web服务器的一部分在Web服务器内执行PHP脚本,而不与CGI程序通信。


mod_SuPHP:类似于mod_php的,但可以改变它的用户/组的过程下运行。

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