是否有与 BASH 中的 read -i
相同的 PHP 功能,以便脚本可以提示用户并提供如下默认答案:
Are you doing ok? (yes/no): yes
其中“是”是脚本提供的默认答案,用户可以删除并输入另一个答案。
readline
功能似乎没有它所需要的。还有其他方法可以做到这一点吗?
使用流似乎也不起作用:
<?php
echo "Are you doing ok? (yes/no): ";
$in = fopen('php://stdin', 'rw+');
fputs($in, 'yes'); // should be the default?
$answer = fgets($in);
fclose($in);
echo "\nYou entered: {$answer}\n";
fputs($in, 'yes');
行写入的任何内容都将被忽略:
Are you doing ok? (yes/no): yes
You entered:
我是否错误地使用了流?或者也许还有其他方法来实现默认值?
编辑:
也许我把这个例子简化太多了。真正的问题不是简单的“是/否”提示 - 这只是一个示例。让我再次强调:我的目标是提供与 read -i BASH 命令完全相同的功能。在我的具体情况下,$answer 包含一个 URL,因此我希望向用户提供 URL 的第一部分(方案、主机、端口),以便他可以添加/编辑其余(路径、查询)、片段。像这样:
Enter url: http://www.example.com/foo/
现在用户用 bar/baz
补充路径,我们得到:
You entered: http://www.example.com/foo/bar/baz
但另一方面,用户还应该可以选择删除网址的第一部分并提供完全不同的字符串:
Enter url: ftp://www.my-super-specific-domain.com/foo/bar
最佳答案
没有内置的方法可以做到这一点,因为编写一些代码来做到这一点非常简单:
function writeQuestion($question, $answers)
{
echo $question . ' (' . implode('/', $answers) . '): ' . PHP_EOL;
}
function readAnswer($possibleAnswers, $defaultAnswer)
{
$in = fopen('php://stdin', 'rw+');
$answer = trim(fgets($in));
if(!in_array($answer, $possibleAnswers))
{
return $defaultAnswer;
}
return $answer;
}
$question = 'Are you doing ok?';
$answers = array('yes', 'no');
$defaultAnswer = 'yes';
writeQuestion($question, $answers);
$answer = readAnswer($answers, $defaultAnswer);
关于php - 如何在 PHP 中为用户输入提供默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21216561/