通过 CLI 运行 PHP 时的 URL 参数

arx*_*oft 4 php command-line-interface

有什么方法可以将参数(如 URL 中的查询字符串或 URL 参数)传递给通过 CLI 运行的 PHP 文件?对于一些需要从参数输入的 PHP cron 作业,我需要这个。例如:

$ php /home/abc/www/myphp.php?param1=abc
Run Code Online (Sandbox Code Playgroud)

ent*_*erx 5

每个命令行界面argcargv.

argv - 传递给脚本的参数数组。

argc - 传递给脚本的命令行参数的数量(如果在命令行上运行)。

制作脚本 cli.php

<?php
print_r($_SERVER['argv']);
Run Code Online (Sandbox Code Playgroud)

并用参数调用它:

$ php cli.php argument1=1
Run Code Online (Sandbox Code Playgroud)

您应该得到如下所示的输出:

Array
(
    [0] => cli.php
    [1] => argument1=1
)
Run Code Online (Sandbox Code Playgroud)

来源:http : //www.php.net/manual/en/reserved.variables.server.php

如果您仍然要求有一个单点条目并且能够像 $_GET 那样处理 url 查询,那么通过添加一个开关让您的脚本像一个路由器:

if (PHP_SAPI === 'cli')
{
   // ... BUILD $_GET array from argv[0] 
} 
Run Code Online (Sandbox Code Playgroud)

但是 - 它违反了 SRP - 单一职责原则!考虑到这一点,如果您仍然要求像您在问题中所说的那样工作,您可以这样做:

if (PHP_SAPI === 'cli')
{
   /** ... BUILD  from argv[0], by parsing the query string, a new array and 
    *  name it $data or at will 
    */
}
else
{
   // ... BUILD  new $data array from $_GET array
}
Run Code Online (Sandbox Code Playgroud)

之后将代码转换为使用 $data 数组而不是 $_GET

...祝你有愉快的一天!