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_CHAR
和HAVE_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 期间添加的