我有3个相同的片段要求用户通过命令行输入。第一个查询被询问给用户和第三个查询,但由于某些原因,第二个代码段虽然代码相同,但输出不正确。下面是输出:通过命令行跳过输入的用户与PHP的交互
正如你可以看到它跳过content 2
并直通内容3.任何想法是什么问题呢?
只要我点击内容1的y
,代码就会直接运行到Would you like to print content 3
!
<?php
echo "\n\033[1;35m~~~~~~ CONTENT 1 ~~~~~~\033[0m\n\n";
echo "\033[1;37mWould you like to print content 1? (y/n) - ";
$stdin = fopen('php://stdin', 'r');
$response = fgetc($stdin);
if ($response == 'y') {
echo "\033[0m";
echo "Content 1 print success!";
}
echo "\n\033[1;35m~~~~~~ CONTENT 2 ~~~~~~\033[0m\n\n";
echo "\033[1;37mWould you like to print content 2? (y/n) - ";
$stdin = fopen('php://stdin', 'r');
$response = fgetc($stdin);
if ($response == 'y') {
echo "\033[0m";
echo "Content 2 print success!";
}
echo "\n\033[1;35m~~~~~~ CONTENT 3 ~~~~~~\033[0m\n\n";
echo "\033[1;37mWould you like to print content 3? (y/n) - ";
$stdin = fopen('php://stdin', 'r');
$response = fgetc($stdin);
if ($response == 'y') {
echo "\033[0m";
echo "Content 3 print success!\n";
}
echo "\033[0m";
?>
使用DO /同时建议它可以让我输入了3次,但这次内容2和3输入请求被复制!
在这里看到:
<?
echo "\n\033[1;35m~~~~~~ CONTENT 1 ~~~~~~\033[0m\n\n";
do {
echo "\033[1;37mWould you like to print content 1? (y/n) - ";
$stdin = fopen('php://stdin', 'r');
$response = fgetc($stdin);
} while (!in_array($response, ['y','n']));
if ($response == 'y') {
echo "\033[0m";
echo "Content 1 print success!";
}
echo "\n\033[1;35m~~~~~~ CONTENT 2 ~~~~~~\033[0m\n\n";
do {
echo "\033[1;37mWould you like to print content 2? (y/n) - ";
$stdin = fopen('php://stdin', 'r');
$response = fgetc($stdin);
} while (!in_array($response, ['y','n']));
if ($response == 'y') {
echo "\033[0m";
echo "Content 2 print success!";
}
echo "\n\033[1;35m~~~~~~ CONTENT 3 ~~~~~~\033[0m\n\n";
do {
echo "\033[1;37mWould you like to print content 3? (y/n) - ";
$stdin = fopen('php://stdin', 'r');
$response = fgetc($stdin);
} while (!in_array($response, ['y','n']));
if ($response == 'y') {
echo "\033[0m";
echo "Content 3 print success!\n";
}
?>
莫非因为输入一些空格或者其捕获新行?对不起,我只是一味地猜测说实话......
----- ----- UPDATE
如果statment在迫使回音,我可以得到我的代码,通过把一个额外的工作只打印一次。它是一个黑客,但如果任何人都可以想出更好的解决方案,请让我知道!
echo "\n\033[1;35m~~~~~~ CONTENT 3 ~~~~~~\n\n";
$x = "1";
do {
if ($x==1){
echo "\033[1;37mWould you like to print content 2? (y/n) - \033[0m\n";
$x = $x+1;
}
$stdin = fopen('php://stdin', 'r');
$response = fgetc($stdin);
} while (!in_array($response, ['y','n']));
if ($response == 'y') {
echo "\033[0m";
echo "Content 3 print success!\n";
}
代码工作在我的机器上。你可能没有输入'y',没有任何额外的字符或什么都没有:) –
hmmmm输入y的内容1后,问题直接到内容3,所以我没有机会输入内容2 :( – NeverPhased
什么是你的?PHP版本 –