是否有任何编译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