• Command line usage
  • Differences to other SAPIs

  • 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
      SAPI because
      they do not make sense in shell environments:

      Overridden php.ini
      Directive CLI SAPI default
      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
      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:

      output_buffering FALSE

      Although the php.ini
      setting is hardcoded to FALSE, the
      Output buffering
      functions are available.

      max_input_time FALSE

      The PHP CLI does not support
      GET, POST or file uploads.


      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).


      It is recommended to set ignore_user_abort for command line scripts. See
      ignore_user_abort() for more

    • 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

      // Our simple test application named test.php
      echo getcwd(), "\n";

      When using the CGI version, the output

      $ pwd
      $ php -q another_directory/test.php

      This clearly shows that PHP changes its current directory to the
      one of the executed script.

      Using the CLI SAPI

      $ pwd
      $ php -f another_directory/test.php

      This allows greater flexibility when writing shell tools in


      The CGI SAPI supports
      this CLI SAPI behaviour
      by means of the -C switch
      when run from the command line.