Differences to other SAPIs
Differences to other SAPIs
Differences to other SAPIs
Remarkable differences of the CLI SAPI compared
to other SAPIs:
-
Unlike the CGI SAPI, no
headers are written to the output.Though the CGI SAPI provides
a way to suppress HTTP headers, there’s no equivalent switch to
enable them in the CLI SAPI.CLI is started up in
quiet mode by default, though the -q and –no-header switches are kept for
compatibility so that it is possible to use older CGI scripts.It does not change the working directory to that of
the script. (-C and
–no-chdir switches kept
for compatibility)Plain text error messages (no HTML formatting).
-
There are certain php.ini directives which are overridden by the
CLI
SAPI because
they do not make sense in shell environments:Overridden php.ini
directivesDirective CLI SAPI default
valueComment html_errors FALSE
Defaults to FALSE
, as it can be
quite hard to read error messages in the shell enviroment when they
are cluttered up with uninterpreted HTML tags.implicit_flush TRUE
In a shell environment, it is usually desirable for output,
such as from print, echo and friends,
to be displayed immediately, and not held in a buffer. Nonetheless,
it is still possible to use output buffering to defer or manipulate standard
output.max_execution_time 0 (unlimited) PHP in a shell environment tends to be used for a much more
diverse range of purposes than typical Web-based scripts, and as
these can be very long-running, the maximum execution time is set
to unlimited.register_argc_argv TRUE
Setting this to
TRUE
means that scripts executed via the CLI SAPI always
have access to argc (number of arguments
passed to the application) and argv
(array of the actual arguments).The PHP variables $argc and $argv are automatically set to the
appropriate values when using the CLI SAPI. These
values can also be found in the $_SERVER array, for example:
$_SERVER[‘argv’].output_buffering FALSE
Although the php.ini
setting is hardcoded toFALSE
, the
Output buffering
functions are available.max_input_time FALSE
The PHP CLI does not support
GET, POST or file uploads.Note:
These directives cannot be initialized with another
value from the configuration file php.ini or a custom one (if specified). This
limitation is because the values are applied after all
configuration files have been parsed. However, their values can be
changed during runtime (although this is not sensible for all of
them, such as register_argc_argv).Note:
It is recommended to set ignore_user_abort for command line scripts. See
ignore_user_abort() for more
information. -
To ease working in the shell environment, a number
of constants are defined for I/O streams
. -
The CLI SAPI does
not change the current directory to the
directory of the executed script.Example #1 Example showing the difference to the
CGI
SAPI:<?php
// Our simple test application named test.php
echo getcwd(), "\n";
?>When using the CGI version, the output
is:$ pwd /tmp $ php -q another_directory/test.php /tmp/another_directory
This clearly shows that PHP changes its current directory to the
one of the executed script.Using the CLI SAPI
yields:$ pwd /tmp $ php -f another_directory/test.php /tmp
This allows greater flexibility when writing shell tools in
PHP.Note:
The CGI SAPI supports
this CLI SAPI behaviour
by means of the -C switch
when run from the command line.