我试图在命令行上将一些参数传递给一个简单的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
。
有什么想法吗?
答案 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)
这也让我感到困惑,因此我最终在这里寻找原因。