PHP命令行:getopt总是返回false

时间:2016-01-08 13:58:54

标签: php command-line getopt

我试图在命令行上将一些参数传递给一个简单的PHP脚本。该脚本使用getopt来读取参数。但是,无论我指定什么参数,该方法总是返回false。根据文档,这表明存在错误。但是我如何找出问题所在呢?

<?php
$options = getopt("x");

if ($options === false) 
    echo "No result";
else
    var_dump($options);
?>

// Commandline
$ php myscript.php -x
$ No result

我做错了什么?我在getopt(...)中尝试了各种其他参数规范,但结果始终相同:只返回false

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

您必须指定选项名称以及是否需要(使用:表示必填项,::表示可选参数。

<?php
$options = getopt("x:");

if ($options == false) 
    echo "No result";
else
    var_dump($options);

答案 1 :(得分:0)

getopt总是在我的计算机上返回false的原因是:

register_argc_argv=Off

评论说:

此指令确定PHP是否分别注册$ argv和$ argc 运行时间。 $ argv包含传递给所有参数的数组 调用脚本时的PHP。 $ argc包含一个整数,表示 调用脚本时传递的参数数量。 从运行脚本时,这些数组非常有用。 命令行。启用此伪指令后,注册这些 每次执行脚本时,变量都会消耗CPU周期和内存 被执行。出于性能原因,应在以下位置禁用此功能 生产服务器。

最后:

注意:对于CLI SAPI,此伪指令已硬编码为On

但是我实际上使用了php-cli,所以..这可能是一个错误(我有PHP 7.2.13)。尝试启用register_argc_argv=On,看看是否可行。

答案 2 :(得分:0)

默认情况下,似乎始终为该选项分配false值。 如果根本不指定该选项,则根本不存在。

尝试一下:

#!/usr/bin/env php
<?php
$getopt = getopt('x');
if (isset($getopt['x'])){
    echo "The x option was specified and is default value is: ";
    var_dump($getopt['x']);
    exit(0);
} else {
    echo "No valid options were specified\n";
    exit(1);
}

php myscript.php -x将输出:

The x option was specified and is default value is: bool(false)

这也让我感到困惑,因此我最终在这里寻找原因。