PHP与readline支持编译为Windows

是否有任何编译php包内置readline支持?

readline是为了在交互模式下使用php所必需的。

我看了如何编译窗口的PHP,但他们需要MS Visual Studio,我没有。

Readline扩展在Windows上不可用。 我认为可以在cygwin中编译PHP,以启用--with-readline选项

  //The readline library is not available on Windows. <?php if (PHP_OS == 'WINNT') { echo '$ '; $line = stream_get_line(STDIN, 1024, PHP_EOL); } else { $line = readline('$ '); } ?> 

我直接从php文档中找到了这个代码。 正如你可能看到的那样,windows机器上的readline库不支持(至少在ddefault包里),但是你可以通过执行上面代码中的“$ line = blah,blah”来得到类似的结果。

我试了一下,并使用窗口的标准CMD工作(尽管我认为交互式PHP模式不会在Windows中工作),但它比没有任何用户输入(如果你真的要记住所有的代码)更好。

这可能有点晚了,但这里的解决方案,为我解决了这个问题:在C#的Console风格,我写了一个类,可以做一个readLine()以及writeLine($str)

 class Console { const READLINE_MAX_LENGTH = 0xFFFF; const WRITELINE_NEWLINE = "\n"; private static /*Resource*/ $stdin; private static /*Resource*/ $stdout; public static function /*void*/ close () { fclose(self::$stdin); fclose(self::$stdout); } public static function /*void*/ open () { self::$stdin = fopen('php://stdin', 'r'); self::$stdout = fopen('php://stdout', 'w'); } public static function /*string*/ readLine () { return stream_get_line(self::$stdin, self::READLINE_MAX_LENGTH, "\r\n"); } public static function /*void*/ writeLine (/*string*/ $str) { fwrite(self::$stdout, $str); fwrite(self::$stdout, self::WRITELINE_NEWLINE); } } 

用法示例:

 Console::open(); echo "Input something: "; $str = Console::readLine(); if (is_string($str)) Console::writeLine($str); else echo "ERROR"; Console::close(); 

编辑:这种方法显然只适用,如果父进程不改变STDOUT或STDIN。

考虑到galymzhan的答案,在Windows上以交互模式运行PHP的另一个选择是使用PHP REPL之一。 你不会得到标签完成,因为它依赖于readline。

目前为止我工作的REPL是PHP-Shell

http://jan.kneschke.de/projects/php-shell/