PHP ��������ģʽ

Table of Contents

�Ӱ汾 4.3.0 ��ʼ��PHP �ṩ��һ�������͵� CLI SAPI��Server Application Programming Interface�������Ӧ�ñ�̶˿ڣ�֧�֣���Ϊ CLI����Ϊ Command Line Interface���������нӿڡ�����˼�壬�� CLI SAPI ģ����Ҫ���� PHP �Ŀ������Ӧ�á�CLI SAPI ������ CLI SAPI ģ������кܶ�IJ�֮ͬ�������ǽ��ڱ�������ϸ������ֵ��һ����ǣ�CLI �� CGI �Dz�ͬ�� SAPI����������֮���кܶ๲ͬ����Ϊ��

CLI SAPI �������� PHP 4.2.0 �汾�����ģ����Ծ�ֻ��һ��ʵ���Եİ汾������Ҫ������ ./configure ʱ���� --enable-cli �������� PHP 4.3.0 �汾��ʼ��CLI SAPI ��Ϊ����ʽģ�飬--enable-cli �����ᱻĬ�ϵ�����Ϊ on��Ҳ�����ò��� --disable-cli �����Ρ�

�� PHP 4.3.0��ʼ��CLI/CGI ������ִ���ļ����ļ�����λ�ú��Ƿ���ڻ���� PHP ��ϵͳ�ϵİ�װ����ͬ����Ĭ������£������� make ʱ��CGI �� CLI ���ᱻ���벢�ҷֱ������ PHP Դ�ļ�Ŀ¼�� sapi/cgi/php �� sapi/cli/php �¡�����ע�⵽�����ļ���������Ϊ�� php���� make install �Ĺ����лᷢ��ʲôȡ���������С���������õ�ʱ��ѡ����һ�� SAPI ģ�飬�� apxs������ʹ���� --disable-cgi ���������� make install �Ĺ����У�CLI ���������� {PREFIX}/bin/php������ CGI �Ѿ������������Ǹ�λ�á���ˣ����磬��������������� --with--apxs ������ make install �Ĺ����У�CLI ���������� {PREFIX}/bin/php�����ϣ������ CGI ִ���ļ��İ�װ������ make install ֮������ make install-cli�����ߣ�Ҳ�������������м��� --disable-cgi ������

Note:

���� --enable-cli �� --enable-cgi ͬʱĬ����Ч����ˣ��������������м��� --enable-cli ��ʹ�� CLI �� make install �����б������� {PREFIX}/bin/php��

�� PHP 4.2.0 �� PHP 4.2.3 ֮��� Windows ���а��У�CLI ���ļ���Ϊ php-cli.exe����ͬ�ļ����µ� php.exe Ϊ CGI���� PHP 4.3.0 �汾��ʼ��Windows �ķ��а��� CLI ��ִ���ļ�Ϊ php.exe����������һ����������Ϊ cli ���ļ����£��� cli/php.exe���� PHP 5 �У�CLI ���������ļ����У���Ϊ php.exe���� CGI �汾��Ϊ php-cgi.exe��

�� PHP 5 ��һ����Ϊ php-win.exe �����ļ�������������൱�� CLI �汾������ php-win ������κ����ݣ��㲻�ṩ����̨�����ᵯ��"DOS ����"�������ַ�ʽ������ php-gtk����Ҫʹ�� --enable-cli-win32 ѡ������������

Note: ��ε�֪�Լ�ʹ�õ����ĸ� SAPI��

���������£����� php -v ���ܵ�֪�� php �� CGI ���� CLI����ο����� php_sapi_name() �Լ����� PHP_SAPI��

Note:

�� PHP 4.3.2 �м����� Unix �� man ҳ�档�������������м��� man php ���鿴��

����Ϊ CLI SAPI ������ CLI SAPI ģ����ȵ���������

  • �� CGI SAPI ��ͬ�������û���κ�ͷ��Ϣ��

    ���� CGI SAPI �ṩ��ȡ�� HTTP ͷ��Ϣ�ķ��������� CLI SAPI �в����������Ƶķ����Կ��� HTTP ͷ��Ϣ�������

    CLI Ĭ���԰���ģʽ��ʼ����Ϊ�˱�֤�����ԣ�-q �� --no-header ����Ϊ����������Ȼ������ʹ�ÿ���ʹ�þɵ� CGI �ű���

    ������ʱ������ѹ���Ŀ¼��Ϊ�ű��ĵ�ǰĿ¼������ʹ�� -C �� --no-chdir ���������� CGI ģʽ����

    ����ʱ������ı��Ĵ�����Ϣ���� HTML ��ʽ����

  • CLI SAPI ǿ�Ƹ����� php.ini �е�ijЩ���ã���Ϊ��Щ��������ǻ�������û������ġ�

    ���� php.ini ����ѡ��
    ����ѡ�� CLI SAPI Ĭ��ֵ ��ע
    html_errors FALSE ������� HTML ��Ƿ���ʹ�ó�����Ϣ�����ң�������������Ķ�������Ϣ��ʮ�����ѵġ���˽���ѡ���Ĭ��ֵ��Ϊ FALSE��
    implicit_flush TRUE ��������ģʽ�£��������� print �� echo �������������д������ˣ��������κεػ�����������ϣ���ӻ�����Ʊ�׼�������Ȼ����ʹ�� output buffering �����
    max_execution_time 0������ֵ�� ��������ǻ�����ʹ�� PHP ������Ŀ����ԣ��������ʱ�䱻����Ϊ������ֵ��Ϊ web ������Ӧ�ó������ֻ�����м�����ʱ�䣬�����Ӧ�ó��������ʱ����᳤ܻ�Ķࡣ
    register_argc_argv TRUE

    ���ڸ�����Ϊ TRUE�������ǿ����� CLI SAPI �з��ʵ� argc�����͸�Ӧ�ó�������ĸ������� argv��������ʵ�ʲ��������飩��

    ���� PHP 4.3.0����ʹ�� CLI SAPI ʱ��PHP ���� $argc �� $argv �ѱ�ע�Ტ���趨�˶�Ӧ��ֵ��������֮ǰ�İ汾�������������� CGI ���� ģ�� �汾�еĽ��������ڽ� PHP ������ѡ�� register_globals ��Ϊ on�����˰汾�� register_globals �趨���⣬������ʱͨ������ $_SERVER ���� $HTTP_SERVER_VARS ���������ǡ����磺$_SERVER['argv']

    Note:

    ��Щ�����޷��������ļ� php.ini ���κ�ָ���������ļ��б���ʼ��Ϊ����ֵ����ЩĬ��ֵ�����������������������ļ���������ı䡣���������ǵ�ֵ�����ڳ������еĹ����б��ı䣨���ܶ��ڸ����й�����˵����Щ��������û������ģ���

  • Ϊ�˼�����ǻ����µĹ��������Ƕ��������³�����

    CLI ר�ó���
    �������� �� ��
    STDIN һ���Ѵ򿪵�ָ�� stdin ���������������·��������ã�
    <?php

    $stdin 
    fopen('php://stdin''r');

    ?>
    ������ stdin ��ȡһ�����ݣ�����ʹ��
    <?php
    $line 
    trim(fgets(STDIN)); // �� STDIN ��ȡһ��
    fscanf(STDIN"%d\n"$number); // �� STDIN ��ȡ����
    ?>
    STDOUT һ���Ѵ򿪵�ָ�� stdout ���������������·�ʽ�����ã�
    <?php

    $stdout 
    fopen('php://stdout''w');

    ?>
    STDERR һ���Ѵ򿪵�ָ�� stderr ���������������·�ʽ�����ã�
    <?php

    $stderr 
    fopen('php://stderr''w');

    ?>

    �������ϳ������������Լ�����ָ������ stderr ������ֻ��򵥵�ʹ����Щ������������ָ��

    php -r 'fwrite(STDERR, "stderr\n");'
    �����Լ����ر���Щ����PHP ���Զ������Щ������

  • CLI SAPI ��������ǰĿ¼��Ϊ�����еĽű����ڵ�Ŀ¼��

    ���·�����ʾ�˱�ģ���� CGI SAPI ģ��֮��IJ�ͬ��

    <?php
    // ��Ϊ test.php �ļ򵥲��Գ���
    echo getcwd(), "\n";
    ?>

    ��ʹ�� CGI �汾ʱ�������Ϊ

    $ pwd
    /tmp
    
    $ php-cgi -f another_directory/test.php
    /tmp/another_directory
    

    ���Կ��Կ��� PHP ����ǰĿ¼�ij��˸ո����й��Ľű����ڵ�Ŀ¼��

    ʹ�� CLI SAPI ģʽ���õ���

    $ pwd
    /tmp
    
    $ php -q another_directory/test.php
    /tmp
    
    ��ʹ�������� PHP ��д��ǹ���ʱ����˺ܴ�ı�����

    Note:

    ����������������ʱ���� CGI SAPI ���� -C ������ʹ��֧�� CLI SAPI �Ĺ��ܡ�

������ PHP �������ļ����� php.exe �����ṩ��������ģʽ��ѡ���������ʱ�������д� -h ������ PHP ��������ѯ��Щ������

Usage: php [options] [-f] <file> [--] [args...]
       php [options] -r <code> [--] [args...]
       php [options] [-B <begin_code>] -R <code> [-E <end_code>] [--] [args...]
       php [options] [-B <begin_code>] -F <file> [-E <end_code>] [--] [args...]
       php [options] -- [args...]
       php [options] -a

  -a               Run interactively
  -c <path>|<file> Look for php.ini file in this directory
  -n               No php.ini file will be used
  -d foo[=bar]     Define INI entry foo with value 'bar'
  -e               Generate extended information for debugger/profiler
  -f <file>        Parse <file>.
  -h               This help
  -i               PHP information
  -l               Syntax check only (lint)
  -m               Show compiled in modules
  -r <code>        Run PHP <code> without using script tags <?..?>
  -B <begin_code>  Run PHP <begin_code> before processing input lines
  -R <code>        Run PHP <code> for every input line
  -F <file>        Parse and execute <file> for every input line
  -E <end_code>    Run PHP <end_code> after processing all input lines
  -H               Hide any passed arguments from external tools.
  -s               Display colour syntax highlighted source.
  -v               Version number
  -w               Display source with stripped comments and whitespace.
  -z <file>        Load Zend extension <file>.

  args...          Arguments passed to script. Use -- args when first argument
                   starts with - or script is read from stdin

CLI SAPI ģ�����������ֲ�ͬ�ķ�������ȡҪ���е� PHP ���룺

  1. �� PHP ����ָ���ļ���

    php my_script.php
    
    php -f my_script.php
    

    �������ַ�����ʹ�û�ʹ�� -f ���������ܹ����и����� my_script.php �ļ�������ѡ���κ��ļ������У�ָ���� PHP �ű����DZ���Ҫ�� .php Ϊ��չ�������ǿ�����������ļ�������չ����

  2. ��������ֱ������ PHP ���롣

    php -r 'print_r(get_defined_constants());'
    

    ��ʹ�����ַ���ʱ����ע����DZ�������������ŵ�ʹ�á�

    Note:

    ����ϸ�Ķ����Ϸ����������д���ʱû�п�ʼ�ͽ����ı�Ƿ������� -r ��������Щ��Ƿ��Dz���Ҫ�ģ��������ǻᵼ���﷨����

  3. ͨ����׼���루stdin���ṩ��Ҫ���е� PHP ���롣

    �����÷��ṩ�˷dz�ǿ��Ĺ��ܣ�ʹ�ÿ������·�����ʾ����̬������ PHP ���벢ͨ��������������Щ���룺

    $ some_application | some_filter | php | sort -u >final_output.txt
    

�����������д���ķ�������ͬʱʹ�á�

�����е����Ӧ�ó���һ����PHP �Ķ������ļ���php.exe �ļ����������е� PHP �ű��ܹ�����һϵ�еIJ�����PHP û�����ƴ��͸��ű�����IJ����ĸ�������dz���������е��ַ��������ƣ���ͨ�������ᳬ�������ƣ������ݸ��ű��IJ�������ȫ�ֱ��� $argv �л�ȡ�����������±�Ϊ��ij�ԱΪ�ű������ƣ��� PHP �������Ա�׼�����ֱ���� -r �����������з�ʽ����ʱ��������Ϊ"-"�������⣬ȫ�ֱ��� $argc ���� $argv �����г�Ա�����ĸ��������Ǵ��͸��ű�����IJ����ĸ�������

ֻҪ���͸��ű��IJ��������� - ���ſ�ͷ������������ע��ʲô����ű������� - ��ͷ�IJ����ᵼ�´�����Ϊ PHP ����ΪӦ������������������Щ�����������ò����б�ָ��� -- �����������⡣�� PHP ����������󣬸÷��ź����еIJ������ᱻԭ�����͸��ű�����

# ��������������� PHP ���룬��ֻ��ʾ PHP ������ģʽ��ʹ��˵����
$ php -r 'var_dump($argv);' -h
Usage: php [options] [-f] <file> [args...]
[...]

# ����������"-h"�������͸��ű�����PHP ������ʾ������ģʽ��ʹ��˵����
$ php -r 'var_dump($argv);' -- -h
array(2) {
  [0]=>
  string(1) "-"
  [1]=>
  string(2) "-h"
}

����֮�⣬������һ�������� PHP ������ǽű���������дһ���ű������ڵ�һ���� #!/usr/bin/php ��ͷ������������ PHP ��ʼ�ͽ�β��Ƿ������������� PHP ���룬Ȼ��Ϊ���ļ�������ȷ���������ԣ����磺chmod +x test�����÷�������ʹ�ø��ļ��ܹ�����ǽű��� PERL �ű�һ����ֱ��ִ�С�

#!/usr/bin/php
<?php
    var_dump
($argv);
?>

������ļ���Ϊ test ���������ڵ�ǰĿ¼�£����������²�����

$ chmod +x test
$ ./test -h -- foo
array(4) {
  [0]=>
  string(6) "./test"
  [1]=>
  string(2) "-h"
  [2]=>
  string(2) "--"
  [3]=>
  string(3) "foo"
}

�����������ģ�����ýű������� - ��ͷ�IJ���ʱ���ű���Ȼ�ܹ��������С�

PHP 4.3.3 ������Ч�ij�ѡ��:

������ѡ��
ѡ������ ������ ˵��
-a --interactive

����ʽ���� PHP��������� PHP ʱ������ Readline ��չ��Windows �²����ã����ǽ���õ�һ���ܺõ���ǣ�����һ���Զ���ɵĹ��ܣ���������ڼ����������ʱ�򣬰��� TAB ����PHP ���Զ���ɸñ��������Լ�������ʷ��¼�����������¼������ʡ���ʷ��¼���� ~/.php_history �ļ��С�

Note:

ͨ�� auto_prepend_file �� auto_append_file �������ļ��ڴ�ģʽ�»ᱻ����������Щ���ƣ����纯�������ڱ�����֮ǰ���塣

-c --php-ini

�øò���������ָ��һ������ php.ini �ļ���Ŀ¼������ֱ��ָ��һ���Զ���� INI �ļ������ļ������Բ��� php.ini�������磺

$ php -c /custom/directory/ my_script.php

$ php -c /custom/directory/custom-file.ini my_script.php
�����ָ����ѡ�PHP ����Ĭ��λ�������ļ���

-n --no-php-ini

��ȫ���� php.ini���˲����� PHP 4.3.0 �Ժ���Ч��

-d --define

�øò����������������κο����� php.ini �ļ������õ�����ѡ���ֵ�����﷨Ϊ��

-d configuration_directive[=value]

���ӣ������ԭ���������ʾ����

# ȡֵ���ֱ�ʡ�ԣ����������ѡ����Ϊ "1"
$ php -d max_execution_time
        -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(1) "1"

# ȡֵ����Ϊ�հף����������ѡ����Ϊ ""
php -d max_execution_time=
        -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(0) ""

# ����ѡ������ó�Ϊ�κ� '=' �ַ�֮���ֵ
$  php -d max_execution_time=20
        -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(2) "20"
$  php
        -d max_execution_time=doesntmakesense
        -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(15) "doesntmakesense"

-e --profile-info

������չ��Ϣģʽ�������ڵ��ԣ����ԡ�

-f --file

���������� -f ѡ��������ļ������ò���Ϊ��ѡ����������ʡ�ԣ���ָ����Ҫ���е��ļ������ɡ�

-h and -? --help and --usage ʹ�øò��������Եõ������������в������б���Щ�������õļ�������
-i --info �������в�������� phpinfo() ��������ʾ���������� PHP û����������������ִ�� php -i �������鿴����Ϣ���֮ǰ���߶�Ӧ�ĵط��Ƿ����κδ�����Ϣ�������ע�⵱ʹ�� CGI ����ʱ�����������Ϊ HTML ��ʽ������������Ϣƪ���ϴ�
-l --syntax-check

�ò����ṩ�˶�ָ�� PHP ��������﷨���ķ���ķ���������ɹ��������׼���д�� No syntax errors detected in <filename> �ַ�����������Ƿ���ֵΪ 0�����ʧ�ܣ������ Errors parsing <filename> �Լ��ڲ�������������Ϣ����׼�����ͬʱ��Ƿ���ֵ��������Ϊ 255��

�ò������޷��������������δ���庯���������Ҳϣ���������������ʹ�� -f ������

Note:

�ò������ܺ� -r һͬʹ�á�

-m --modules

ʹ�øò�����PHP ����ӡ�������Լ��Ѽ��ص� PHP �� Zend ģ�飺

$ php -m
[PHP Modules]
xml
tokenizer
standard
session
posix
pcre
overload
mysql
mbstring
ctype

[Zend Modules]

-r --run

ʹ�øò��������������������е��� PHP ���롣�������� PHP ����ʼ�ͽ�����ʶ����<?php �� ?>�������򽫻ᵼ���﷨��������

Note:

ʹ��������ʽ�� PHP ʱ��Ӧע��������ǻ������е������в����滻���ͻ��

��ʾ�﷨��������ķ���

$ php -r "$foo = get_defined_constants();"
Command line code(1) : Parse error - parse error, unexpected '='
������������ڼ�ʹʹ����˫���� "��sh/bash ��Ȼʵ���˲����滻������ $foo û�б����壬���滻�������ڵ�λ�ñ���˿��ַ������������ʱ��ʵ�ʱ� PHP ��ȡ�Ĵ���Ϊ��
$ php -r " = get_defined_constants();"
��ȷ�ķ�����ʹ�õ����� '�����õ��������õ��ַ����У��������ᱻ sh/bash ��ԭ����ԭֵ��
$ php -r '$foo = get_defined_constants(); var_dump($foo);'
array(370) {
  ["E_ERROR"]=>
  int(1)
  ["E_WARNING"]=>
  int(2)
  ["E_PARSE"]=>
  int(4)
  ["E_NOTICE"]=>
  int(8)
  ["E_CORE_ERROR"]=>
  [...]
���ʹ�õ���Dz��� sh/bash�����ܻ������������⡣�뽫������ Bug �� » https://bugs.php.net/ ���档ע�⣬����ͼ�� shell �����õ������л���ʹ�÷�б��ʱ��Ȼ�������������⡣

Note:

-r �� CLI SAPI �������� CGI SAPI ������

Note:

��ѡ��ֻ���ڷdz���������;�����һЩ����ָ����� auto_prepend_file �� auto_append_file���ڴ�ģʽ�±����ԡ�

-B --process-begin

�ڴ��� stdin ֮ǰ��ִ�� PHP ���롣PHP 5 �¼ӡ�

-R --process-code

��ÿ�������ж�ִ�� PHP ���롣PHP 5 �¼ӡ�

��ģʽ�����������������$argn �� $argi��$argn ���� PHP ��ǰ����������ݣ��� $argi ��������кš�

-F --process-file

��ÿ�������ж�ִ�� PHP �ļ���PHP 5 �¼ӡ�

-E --process-end

�ڴ����������ִ�е� PHP ���롣PHP 5 �¼ӡ�

ʹ�� -B ��-R �� -E ѡ��������һ����Ŀ�����������ӡ�

$ find my_proj | php -B '$l=0;' -R '$l += count(@file($argn));' -E 'echo "Total Lines: $l\n";'
Total Lines: 37328

-s --syntax-highlight and --syntax-highlight

��ʾ���﷨����ɫ�ʵ�Դ���롣

�ò���ʹ���ڽ������������ļ���Ϊ������һ�� HTML �����汾�������д����׼�������ע��ù���������ֻ��������һ�� <code> [...] </code> �� HTML ��ǵĿ飬���������κε� HTML ͷ��

Note:

��ѡ��ܺ� -r ����ͬʱʹ�á�

-v --version

�� PHP��PHP SAPI �� Zend �İ汾��Ϣд���׼��������磺

$ php -v
PHP 4.3.0 (cli), Copyright (c) 1997-2002 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2002 Zend Technologies

-w --strip

��ʾ��ȥ��ע�ͺͶ���հ׵�Դ���롣

Note:

��ѡ��ܺ� -r ����ͬʱʹ�á�

-z --zend-extension

���� Zend ��չ�⡣���������һ���ļ�����PHP ����ͼ�ӵ�ǰϵͳ��չ���Ĭ��·������ Linux ϵͳ�£���·��ͨ���� /etc/ld.so.conf ָ�������ظ���չ�⡣�����һ������·��ָ���ļ������򲻻�ʹ��ϵͳ����չ��Ĭ��·������������·��ָ�����ļ������� PHP ����ͼ�ڵ�ǰĿ¼�����Ŀ¼������չ�⡣

PHP ��������ģʽ��ʹ�� PHP �ű�����ȫ������ web �������������С����ʹ�� Unix ϵͳ����Ҫ�� PHP �ű�����ǰ�����һ������Ĵ��룬ʹ�����ܹ���ִ�У�����ϵͳ����֪�����ĸ�����ȥ���иýű����� Windows ƽ̨�¿��Խ� php.exe �� .php �ļ���˫�������������Ҳ���Ա�дһ���������ļ����� PHP ִ�нű���Ϊ Unix ϵͳ���ӵĵ�һ�д��벻��Ӱ��ýű��� Windows �µ����У����Ҳ�����ø÷�����д��ƽ̨�Ľű�����������һ���򵥵� PHP �����г���ķ�����

Example #1 ��ͼ�������з�ʽ���е� PHP �ű���script.php��

#!/usr/bin/php
<?php

if ($argc != || in_array($argv[1], array('--help''-help''-h''-?'))) {
?>

This is a command line PHP script with one option.

  Usage:
  <?php echo $argv[0]; ?> <option>

  <option> can be some word you would like
  to print out. With the --help, -help, -h,
  or -? options, you can get this help.

<?php
} else {
    echo 
$argv[1];
}
?>

�����Ͻű��У��õ�һ������Ĵ�����ָ�����ļ�Ӧ���� PHP ��ִ�С�������ʹ�� CLI �İ汾����˲����� HTTP ͷ��Ϣ��������� PHP ��д������Ӧ�ó���ʱ������ʹ������������$argc �� $argv��ǰ��һ����ֵ�DZȲ��������� 1 �����������еĽű����������Ҳ������һ�����������ڶ����ǰ����в��������飬���һ��Ԫ��Ϊ�ű������ƣ��±�Ϊ���� 0��$argv[0]����

���ϳ����м���˲����ĸ����Ǵ��� 1 ������С�� 1 ����������������� --help ��-help ��-h �� -? ʱ����ӡ��������Ϣ����ͬʱ��̬����ű������ơ�������յ�������������������ʾ������

���ϣ���� Unix ���������Ͻű�����Ҫʹ������Ϊ��ִ���ļ���Ȼ��򵥵����� script.php echothis �� script.php -h���� Windows �£�����Ϊ�˱�дһ���������ļ���

Example #2 ���� PHP �����нű����������ļ���script.bat��

@C:\php\php.exe script.php %1 %2 %3 %

���轫������������Ϊ script.php���� CLI ��� php.exe �ļ������� c:\php\cli\php.exe�����������ļ�����������ӵIJ��������ű�����script.bat echothis �� script.bat -h��

����� Readline ��չģ����й��ĵ����Ի�ȡ����ĺ�������Ϣ����Щ�������԰������� PHP ������Ӧ�ó���