使用PHP的交互式shell

The*_*che 28 php shell interactive

只是想知道,是否可以单独使用PHP创建交互式shell.我的意思是你有数据库,python等.

如果是的话,怎么样?

Wis*_*guy 39

是的,这是可能的.为了实现交互,程序必须能够等待并读入stdin的用户输入.在PHP中,您可以通过打开文件描述符来读取标准输入'php://stdin'.从对不同问题的回答中,这里是PHP中交互式用户提示的示例(当然,从命令行运行时):

echo "Continue? (Y/N) - ";

$stdin = fopen('php://stdin', 'r');
$response = fgetc($stdin);
if ($response != 'Y') {
   echo "Aborted.\n";
   exit;
}
Run Code Online (Sandbox Code Playgroud)

当然,要获得完整的输入线而不是单个字符,您需要fgets()代替fgetc().根据您的程序/ shell将执行的操作,整个程序可能被构造为一个大的连续循环.希望这能让您了解如何开始.如果你想真正想要(CLI伪GUI),你可以使用ncurses.


dot*_*hen 27

由于已经提出并回答这个问题,因此PHP中添加了更好的解决方案.在所有最近的PHP版本中,您可以轻松获得用户输入:

$input = fgets(STDIN);
Run Code Online (Sandbox Code Playgroud)

  • 如果我删除空格,则可以使用:`$ input = rtrim(fgets(STDIN)); ` (3认同)
  • 这适用于哪个版本的PHP? (2认同)

Gab*_*abe 5

我理解你的问题的方式只是希望PHP解释器在命令行上运行,这样你就可以评估你键入的任何PHP代码.我一直使用Python的这个功能来测试代码片段.在这种情况下,我相信您正在寻找的答案是执行(从命令行):

php -a
Run Code Online (Sandbox Code Playgroud)

假设PHP在您的路径中,这将使您进入PHP解释器,就像我在我的:

$ php -a
Interactive shell

php > 
Run Code Online (Sandbox Code Playgroud)

从那里你可以开始评估任意PHP表达式并查看结果:

php > $a = 'abcdef';
php > echo strlen($a);
6
Run Code Online (Sandbox Code Playgroud)