我有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版本 –