php命令行执行-PHP下命令行执行php-Slocalhost

以下是PHP二补代码文件(即php.exe程序)提供的命令行模式的选项参数,您可以随时通过PHP -h命令查询这些参数。

Usage: php [options] [-f]  [args...]
       php [options] -r  [args...]
       php [options] [-- args...]
  -s               Display colour syntax highlighted source.
  -w               Display source with stripped comments and whitespace.
  -f         Parse .
  -v               Version number
  -c | Look for php.ini file in this directory
  -a               Run interactively
  -d foo[=bar]     Define INI entry foo with value 'bar'
  -e               Generate extended information for debugger/profiler
  -z         Load Zend extension .
  -l               Syntax check only (lint)
  -m               Show compiled in modules
  -i               PHP information
  -r         Run PHP  without using script tags 
  -h               This help
 
  args...          Arguments passed to script. Use -- args when first argument 
                   starts with - or script is read from stdin

CLISAPI 模块有三种不同的方式来获取您想要运行的 PHP 代码:

在windows环境下,尽量使用双冒号来完成,在linux环境下,尽量使用单冒号来完成。

让PHP运行指定的文件。

php my_script.php
 
php -f  "my_script.php"

上述两种方法(带或不带 -f 参数)也可以运行给定的 my_script.php 文件。 您可以选择任何文件来运行,并且您指定的 PHP 脚本不一定必须具有 .php 扩展名,它们可以具有任何文件名和扩展名。

直接从命令行运行 PHP 代码。

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

使用这些技术时,请注意 shell 变量的替换和冒号的使用。

注意:请仔细阅读上面的示例,运行代码时没有开始和结束标记! 添加-r参数后,这样的标签就没有必要了,添加会导致句子错误。

提供需要通过标准输入(stdin)运行的PHP代码。

上述用法为我们提供了非常强大的功能,使我们能够动态生成PHP代码并通过命令行运行这些代码,如下例所示:

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

以上三种运行代码的方式不能同时使用。

与所有 shell 应用程序一样,PHP 的二进制补码文件 (php.exe) 及其运行的 PHP 脚本接受一系列参数。 PHP不限制传递给脚本程序的参数数量(shell程序对命令行的字符数有限制,但你一般不会超过这个限制)。 传递给脚本的参数可在全局变量 $argv 中找到。 该字段中的零下标成员是脚本的名称(当 PHP 代码来自标准输入并使用 -r 参数直接在命令行上运行时为“-”)。 另外,全局变量$argc存储的是$argv字段中成员变量的数量(不是传递给脚本的参数数量)。

只要传递给脚本的参数不以 - 符号开头,您就不需要过多关注哪些参数。 向脚本传递以 - 开头的参数会导致错误,因为 PHP 会认为它应该自己处理这些参数。 可以使用参数列表分隔符--来解决这个问题。 PHP解析完参数后php命令行执行,该符号后面的所有参数都会原样发送到你的脚本程序中。

# 以下命令将不会运行 PHP 代码,而只显示 PHP 命令行模式的使用说明:
$ php -r 'var_dump($argv);' -h
Usage: php [options] [-f]  [args...]
[...]
 
# 以下命令将会把“-h”参数传送给脚本程序,PHP 不会显示命令行模式的使用说明:
$ php -r "var_dump($argv);" -- -h
array(2) {
  [0]=>
  string(1) "-"
  [1]=>
  string(2) "-h"
}

除此之外,我们还有另一种方法将 PHP 用于 shell 脚本。 您可以编写一个第一行以 #!/usr/bin/php 开头的脚本,后面是包含在 PHP 开始和结束标记中的普通 PHP 代码php命令行执行,然后为文件属性设置正确的运行时。 该方法可以使文件像shell脚本或PERL脚本一样直接执行。

#!/usr/bin/php

假设将文件名改为test并放置在当前目录下,我们可以进行以下操作:

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

正如您所看到的,当您向脚本传递以 - 开头的参数时,脚本仍然可以正常工作。

-------------------------------------------------- -------------------------- 命令选项 -------------------- -- -------------------------------------------

表 23-3。 命令行选项

选项名称 说明

-s

显示源文件并突出显示句子。

此参数使用内置机制来解析文件并生成 HTML 突出显示的版本,并将结果写入标准输出。 请注意,此过程所做的只是生成一个 HTML 标记块,没有任何 HTML 标头。

php命令行执行_php命令执行函数有哪些_php命令行模式

注意:该选项不能与-r参数同时使用。

-w

显示已删除注释和空格的源代码。

注意:该选项不能与-r参数同时使用。

-F

解析并运行给定的文件名。 该参数是可选的,可以省略,只需指定要运行的文件名即可。

-v

将 PHP、PHPSAPI 和 Zend 版本信息写入标准输出。 例如:

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

-C

通过该参数可以指定放置php.ini文件的目录,也可以直接指定自定义的INI文件,其文件名可以不是php.ini。 例如:

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

-A

以交互方式运行 PHP。

php命令执行函数有哪些_php命令行模式_php命令行执行

-d

使用该参数自行设置php.ini文件中变量的值,句型为:

-d configuration_directive[=value]

例子:

# Ommiting the value part will set the given configuration directive to "1"
$ php -d max_execution_time 
       -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(1) "1"
 
# Passing an empty value part will set the configuration directive to ""
php -d max_execution_time= 
       -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(0) ""
 
# The configuration directive will be set to anything passed after the '=' character
$  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

为调试器等生成扩展信息。

-z

加载 Zend 扩展库。 如果只给出文件名,PHP 将尝试从系统扩展库的默认路径加载扩展(在 Linux 系统下,该路径通常由 /etc/ld.so.conf 指定)。 如果使用绝对路径指定文件名,则不会使用系统默认的扩展库路径。 如果使用相对路径指定文件名,PHP 将仅尝试加载相对于当前目录的扩展库。

-l

该参数提供了一种对指定PHP代码进行句型检测的便捷方法。 如果成功,字符串 NosyntaxerrorsDetectedin 将写入标准输出,但 shell 返回值 0。如果失败,Errorsparsing 和内部解析器错误消息将一起写入标准输出,并且 shell 返回值设置为 255。

该参数将导致难以检测致命错误(例如未定义的函数),如果要检查名称错误,请使用 -f 参数。

注意:该参数不能与-r一起使用。

-m

使用此参数,PHP 将复制外部并加载的 PHP 和 Zend 模块:

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

-我

此命令行参数调用 phpinfo() 函数并复制结果。 如果 PHP 无法正常工作,建议您执行 php -i 命令,查看消息表之前或位置是否有错误消息输出。 请注意,输出内容为HTML格式,因此输出信息比较大。

-r

使用此参数在命令行上运行 PHP 代码。 不需要添加PHP开始和结束标识符(),否则会导致句子解析错误。

注意:以这些方式使用 PHP 时,应注意防止与 shell 环境进行的命令行参数替换发生冲突。

显示句子解析错误的示例

$ 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 以外的 shell,则可能会遇到其他问题。 请报告您遇到的错误,或发送电子邮件至 phpdoc@lists.php.net。

php命令执行函数有哪些_php命令行模式_php命令行执行

当你尝试将shell的环境变量引入木马或者使用反斜杠通配符时,也可能会遇到各种问题,使用时请注意!

注意:-r 在 CLISAPI 中有效,在 CGISAPI 中无效。

-H

使用此参数,您可以获得命令行参数的完整列表以及这些参数的作用的简要说明。

PHP的命令行模式使得PHP脚本能够完全独立于WEB服务器运行。 如果你使用Unix系统,你需要在你的PHP脚本的顶部添加一行特殊的代码以便它可以被执行,这样系统就可以知道使用哪个程序来运行该脚本。 在Windows平台下,可以将php.exe与.php文件的双击属性关联起来,也可以编译成批处理文件,用PHP来执行脚本。 对于Unix系统减少的第一行代码不会影响Windows下脚本的运行,因此也可以通过这种方式编译跨平台脚本。 下面是一个简单的 PHP 命令行程序的示例。

案例23-1。 尝试从命令行运行的 PHP 脚本 (script.php)

#!/usr/bin/php

这是一个带有一个选项的命令行 PHP 脚本。

用法:

可以是你想要的一些词

打印输出。 使用--help、-help、-h,

或-?选项,您可以获得此帮助。

在上面的脚本中,我们使用第一行特殊代码来指示该文件应由 PHP 执行。 我们在这里使用 CLI 版本,因此不会输出 HTTP 标头。 当您用 PHP 编写命令行应用程序时,可以使用两个参数:$argc 和 $argv。 后者的值是一个比参数个数大1的整数(运行脚本本身的名称也被视为参数)。 第二个是包含参数的字段,其第一个元素是下标为数字 0 的脚本名称 ($argv[0])。

上面的程序中,我们检测了参数个数是小于1还是大于1,即使参数是--help、-help、-h、-?,我们仍然打印出帮助信息并动态输出同时指定脚本的名称。 如果收到其他参数,我们也会显示它们。

如果你想在Unix下运行上面的脚本,你需要使其可执行,然后只需运行script.phpechothis或script.php-h即可。 在Windows下,您可以这样编译一个批处理文件:

@c:phpcliphp.exe script.php %1 %2 %3 %4