现在的位置: 首页 > 综合 > 正文

linux下PHP的命令行模式介绍

2013年10月13日 ⁄ 综合 ⁄ 共 4235字 ⁄ 字号 评论关闭

转载自:http://phpff.com/41.html

从版本 4.3.0 开始,PHp提供了一种新类型的 SAPI(Server Application Programming Interface,服务端应用编程端口)支持,名为
CLI,意为 Command Line Interface,即命令行接口。顾名思义,该
SAPI
模块主要用作 PHp的开发外壳应用。CLI SAPI和其它 SAPI模块相比有很多的不同之处,我们将在本章中详细阐述。值得一提的是,CLI
CGI 是不同的 SAPI,尽管它们之间有很多共同的行为。

CLI SAPI 最先是随 PHp4.2.0 版本发布的,但仍旧只是一个实验性的版本,并需要在运行
./configure
时加上 --enable-cli参数。从 PHp4.3.0 版本开始,CLI SAPI 成为了正式模块,--enable-cli参数会被默认得设置为 on,也可以用参数
--disable-cli来屏蔽。

从 PHp4.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 将被拷贝到
{pFIX}/bin/php,除非 CGI 已经被放置在了那个位置。因此,例如,如果在配置行中有
--with--apxs
,则在 make install 的过程中,CLI 将被拷贝到 {pFIX}/bin/php。如果希望撤销 CGI 执行文件的安装,请在
make install之后运行 make install-cli。或者,也可以在配置行中加上
--disable-cgi参数。
 

命令行选项
选项名称 长名称 说明
-a --interactive

交互式运行 PHP。如果编译 PHp时加入了
Readline
扩展(Windows 下不可用),那将会得到一个很好的外壳,包括一个自动完成的功能(例如可以在键入变量名的时候,按下 TAB 键,PHp会自动完成该变量名)以及命令历史记录,可以用上下键来访问。历史记录存在
~/.php_history 文件中。

Note:

通过 auto_ppend_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。此参数在 PHp4.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 -? --helpand --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 [PHpModules] 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"]=> [...]

如果使用的外壳不是 sh/bash,可能会碰到更多问题。请将碰到的 Bug 向
» http://bugs.php.net/
报告。注意,当试图将 shell 变量用到代码中或者使用反斜线时仍然很容易碰到问题。

Note:

-rCLI SAPI 中有效,在
CGI SAPI 中无效。

Note:

此选项只用于非常基本的用途。因此一些配置指令(例如
auto_ppend_file

auto_append_file
)在此模式下被忽略。

-B --process-begin

在处理 stdin 之前先执行 PHp代码。PHp5 新加。

-R --process-code

对每个输入行都执行 PHp代码。PHp5 新加。

此模式下有两个特殊变量:$argn
$argi
$argn包含 PHp当前处理的行内容,而
$argi 则包含该行号。

-F --process-file

对每个输入行都执行 PHp文件。PHp5 新加。

-E --process-end

在处理完输入后执行的 PHp代码。PHp5 新加。

使用 -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,PHpSAPI 和 Zend 的版本信息写入标准输出。例如:

$ php-v PHp4.3.0 (cli), Copyright (c) 1997-2002 The PHpGroup 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运行指定文件

phpmy_script.php

php-f my_script.php

以上两种方法(使用或不使用 -f参数)都能够运行给定的
my_script.php
文件。可以选择任何文件来运行,指定的 PHp脚本并非必须要以 .php为扩展名,它们可以有任意的文件名和扩展名。

抱歉!评论已关闭.