Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is difference between PHP cli and PHP cgi?

Tags:

php

cgi

I just found two executable files, php-cgi.exe and php.exe in the bin folder of the WAMP server on my laptop. I am learning PHP and could not figure out the difference. What is difference between them?

like image 286
user1208865 Avatar asked Feb 16 '12 17:02

user1208865


People also ask

What is PHP CGI?

It is a specification “protocol” for transferring information between a Web server and a CGI program. A CGI program is any program designed to accept and return data that conforms to the CGI specification. Basically, it's a way to run a server-side script (PHP, Perl, Python) when an HTTP request comes.

What is the PHP CLI?

PHP's Command Line Interface (CLI) allows you to execute PHP scripts when logged in to your server through SSH. ServerPilot installs multiple versions of PHP on your server so there are multiple PHP executables available to run.

What is PHP-FPM and CLI?

php-fpm ist running in its own process all the time. It can use apc because it uses continuously the ram over several requests. The memory is only released through the garbage collector or if you kill the fpm process. But the a CLI process lives only for one command and when its finished the memory is released.

Do I need PHP CGI?

By default, PHP is built as both a CLI and CGI program, which can be used for CGI processing. If you are running a web server that PHP has module support for, you should generally go for that solution for performance reasons.

What is the difference between PHP-CLI and PHP-CGI?

php-cli is meant for running PHP on the command line. php-cgi does additional things for you, such as HTTP headers and certain security modifications. Having said that, consider installing a FastCGI module and using PHP's FastCGI interface.

What is the difference between PHP-win and CGI?

This is equal to the CLI version, except that php-win doesn't output anything and thus provides no console (no "dos box" appears on the screen). This behaviour is similar to PHP GTK. Show activity on this post. CGI: (common gateway interface) It is a specification "protocol" for transferring information between a Web server and a CGI program.

What is the difference between PHP-CLI and mod_php?

Unlike the PHP-CLI which is a command line interface for PHP to allows Users to interact with PHP via terminal. mod_php: an Apache module to run PHP. It execute PHP scripts inside the Web Server directly as part of the web server without communicating with a CGI program.

What is a PHP-CLI server?

It runs as a standalone FastCGI server. In general it's a PHP interface for the web servers (Apache, Nginx..) to allows Web Server to interact with PHP. Unlike the PHP-CLI which is a command line interface for PHP to allows Users to interact with PHP via terminal.


2 Answers

From http://www.php-cli.com/php-cli-cgi.shtml

These are the most important differences between CLI and CGI:

  • Unlike the CGI SAPI, CLI writes no headers to the output by default
  • There are some php.ini directives which are overridden by the CLI SAPI because they do not make sense in shell environments:
    • html_errors: CLI default is FALSE
    • implicit_flush: CLI default is TRUE
    • max_execution_time: CLI default is 0 (unlimited)
    • register_argc_argv: CLI default is TRUE
  • You can have command line arguments with your script! Variable "$argc" provides you with a number of arguments passed to the application. And array "$argv" gives you an array of the actual arguments
  • There are 3 new constant defined for the shell environment: STDIN, STDOUT, STDERR. All of them are file handlers for correspondent shell devices. For example STDIN is the handler for fopen('php://stdin', 'r') . So, you can read a line from STDIN like this: $strLine = trim(fgets(STDIN));. STDIN is already defined for you by PHP CLI!
  • PHP CLI does not change the current directory to the directory of the executed script. The current directory for the script would be the directory where your type PHP CLI command.
  • There are number of USEFUL options available for PHP CLI. Which will allow you to get some valuable information about you php setup, your php script or run it in different modes.
  • In PHP 5 there were some changes in CLI and CGI filenames. In PHP 5, the CGI version was renamed to php-cgi.exe (previously php.exe) and the CLI version now sits in the main directory (previously cli/php.exe).
  • In PHP 5 it was also introduced a new mode: php-win.exe. This is equal to the CLI version, except that php-win doesn't output anything and thus provides no console (no "dos box" appears on the screen). This behaviour is similar to PHP GTK.
like image 108
Abdala Cerqueira Avatar answered Oct 21 '22 12:10

Abdala Cerqueira


This might give you a broader understanding of their difference:

CGI: (common gateway interface) It is a specification "protocol" for transferring information between a Web server and a CGI program.

A CGI program is any program designed to accept and return data that conforms to the CGI specification.

Basically it's a way to run a server side script (PHP, Perl, Python,...) when a HTTP request comes.

CGI is very slow in comparison to other alternatives.


FastCGI: is a better CGI.

Fast CGI is a different approach with much faster results.

It is a CGI with only a few extensions.

FastCGI implementation isn’t available anymore, in favor of the PHP-FPM.


PHP-FPM: (FastCGI Process Manager), it's a better FastCGI implementation than the old FastCGI.

It runs as a standalone FastCGI server.

In general it's a PHP interface for the web servers (Apache, Nginx..) to allows Web Server to interact with PHP.

Unlike the PHP-CLI which is a command line interface for PHP to allows Users to interact with PHP via terminal.


mod_php: an Apache module to run PHP.

It execute PHP scripts inside the Web Server directly as part of the web server without communicating with a CGI program.


mod_SuPHP: is similar to mod_php but can change the user/group that the process runs under.

Basically it address some problems of mod_php related to permissions.

like image 55
Mahmoud Zalt Avatar answered Oct 21 '22 13:10

Mahmoud Zalt