PHP 7.1+ Windows readline 扩展 并非所有功能都存在



PHP7.1 的改进之一是,在 Windows 中,readline 扩展是开箱即用的。不过,我在使用所有功能时遇到问题,因为它们并非都存在。以下代码:

$functions = [
'readline_add_history',
'readline_callback_handler_install',
'readline_callback_handler_remove',
'readline_callback_read_char',
'readline_clear_history',
'readline_completion_function',
'readline_info',
'readline_list_history',
'readline_on_new_line',
'readline_read_history',
'readline_redisplay',
'readline_write_history',
'readline'
];
foreach($functions as $function) {
echo $function . (function_exists($function) ? ' exists' : ' does not exist') . PHP_EOL;
}

。生成以下输出:

readline_add_history exists
readline_callback_handler_install does not exist
readline_callback_handler_remove does not exist
readline_callback_read_char does not exist
readline_clear_history exists
readline_completion_function exists
readline_info exists
readline_list_history does not exist
readline_on_new_line does not exist
readline_read_history exists
readline_redisplay does not exist
readline_write_history exists
readline exists

我在 PHP 手册中找不到任何参考资料,表明 Windows 中只有一部分 readline 扩展的函数可用。

当我调用php_info()时,我得到以下输出:

阅读线

已启用读取行支持

阅读线库 WinEditLine

是否需要进行一些 php.ini 配置设置(或 CLI 参数)才能使所有功能可用?或者,是否有其他方法可以使readline_callback_handler_install()等功能在Windows中可用,或者扩展只是半生不熟?

最初我认为您可能以某种方式陷入了缺少这些功能的古老 PHP 5.0,但如果没有,我将不得不猜测您的 PHP 二进制文件是针对不支持这些功能所依赖的功能的底层库 [或其版本] 编译的。

交叉引用缺少的函数列表ext/readline/readline.c我猜你缺少与ext/readline/config.m4中定义的常量/HAVE_RL_CALLBACK_READ_CHARHAVE_LIBEDIT特征相对应的特征。

TL;DR:无论谁编译你的PHP,都需要弄清楚。[可能]

记录

PHP>= 7.4 到 8.1

是的:

  • readline_add_history
  • readline_clear_history
  • readline_completion_function
  • readline_info
  • readline_list_history
  • readline_read_history
  • readline_write_history
  • 阅读线

不:

  • readline_callback_handler_install
  • readline_callback_handler_remove
  • readline_callback_read_char
  • readline_on_new_line
  • readline_redisplay

readline_list_history是在版本 7.2 和 7.3 期间添加的

相关内容

  • 没有找到相关文章

最新更新