最近在维护一个网站后台,开发语言是php,看来要好好学一学这门语言了。 为了做一些简单的练习,都要开启webserver,有些大材小用,所以,就想直接在命令行下运行php脚本。 而且,既然php是一种脚本语言,一些日常用的脚本工具也可以直接用它来实现,权当练习了。 从网上搜了一些资料,整理如下:
注:以下示例运行于Mac OSX 10.10下。
基本运行方式
1. 让 PHP 运行指定文件。
php my_script.php
php -f 'my_script.php'
以上两种方法(使用或不使用 -f 参数)都能够运行给定的 my_script.php 文件。
指定的 PHP 脚本并非必须要以 .php 为扩展名,它们可以有任意的文件名和扩展名。
2. 在命令行直接运行 PHP 代码。
php -r 'print_r(get_defined_constants());'
3. 通过标准输入(stdin)提供需要运行的 PHP 代码。
$ some_application | some_filter | php | sort -u >final_output.txt
向脚本传送参数
传递给脚本的参数可在全局变量 $argv 中获取。该数组中下标为零的成员为脚本的名称(当 PHP代码来自标准输入获直接用 -r 参数以命令行方式运行时,该名称为“-”)。另外,全局变量 $argc 存有 $argv 数组中成员变量的个数。
1. php -r 'var_dump($argv);'
输出:
array(1) {
[0] =>
string(1) "-"
}
2. php -r 'var_dump($argv);’ h
输出:
array(1) {
[0] =>
string(1) "-"
[1] =>
string(1) "h"
}
3. php -r 'var_dump($argv);' -- -h
输出:
array(2) {
[0] =>
string(1) "-"
[1] =>
string(2) "-h"
}
4. php -r 'var_dump($argv);' -h
输出: (该命令将不会运行 PHP 代码,而只显示 PHP 命令行模式的使用说明)
Usage: php [options] [-f] <file> [--] [args...]
php [options] -r <code> [--] [args...]
请注意第三个例子和第四个例子的区别:
向脚本传送以 - 开头的参数会导致错误,因为 PHP 会认为应该由它自身来处理这些参数(例4)。可以用参数列表分隔符 -- 来解决这个问题(例3)。在 PHP 解析完参数后,该符号后所有的参数将会被原样传送给php脚本程序。
制作可执行的php脚本
在 .php 文件的开头加上 #!/usr/bin/php ,并给该文件加上可执行属性。
例如:
#!/usr/bin/php
<?php
var_dump($argv);
?>
保存改文件为test.php, chmod +x test.php , 在Terminal下运行: ./test.php -a -v
输出:
array(3) {
[0]=>
string(11) "./test.php"
[1]=>
string(2) "-a"
[2]=>
string(2) "-v"
}