PHP 8 - 附魔不工作 - 代理返回一个空数组

问题描述

我在 Xampp (Windows) 上使用 PHP 8

已将 extension=PHP_enchant.dll 添加PHP.ini

php_info

  • PHP 目录添加到 windows PATH
  • 已将 libenchant_hunspell.dll / libenchant_ispell.dll / libenchant_myspell.dll 复制到 [PHP]/lib/enchant
  • *.dic*.aff 移至 [PHP]/share/myspell/dicts

但仍然无法获得附魔来检测经纪人

示例代码

<?PHP
$broker = enchant_broker_init();
$tag = 'en_US';

$bprovides = enchant_broker_describe($broker);
echo "Current broker provides the following backend(s):\n";
print_r($bprovides);

输出

Current broker provides the following backend(s): Array ( ) Current broker provides the following dictionaries: Array ( )

解决方法

我遇到了同样的问题。我在 PHP 核心方面的技能中等,经过几天的调试,我终于让它工作了。不幸的是,lib_enchant 和 PHP 8 似乎都有不少变化。

lib_enchant 2.x 和 PHP 8(在 Windows 上)似乎只支持 hunspell 提供程序(PHP 7.x 和之前的版本同时使用 ispell 和 myspell 提供程序)。此外,现在似乎 enchant 将提供程序 DLL 的路径硬编码为:

C:\usr\local\lib\enchant-2

因此,您必须在 lib/enchant 文件夹中的 PHP 发行版中找到 libenchant2_hunspell.dll 以:

C:\usr\local\lib\enchant-2\libenchant2_hunspell.dll

同样,字典文件的位置默认为:

C:\usr\local\share\enchant

所以就我而言,我最终在该文件夹中得到了以下文件:

C:\usr\local\share\enchant\en_US.aff
C:\usr\local\share\enchant\en_US.dic
C:\usr\local\share\enchant\es_ANY.aff
C:\usr\local\share\enchant\es_ANY.dic

在我对 enchant 来源的评论中,您似乎可以通过环境变量 ENCHANT_CONFIG_DIR 控制拼写检查词典的位置,但我相信提供者位置现在是硬编码的。这是 lib_enchant 2.x 和 PHP 8 的新功能......对我们来说是一个巨大的麻烦,因为我们不想在 Windows 机器上的 c:\usr\local 中安装软件。

我可能会编写一个补丁并将其提交给 PHP 以解决此问题,但我担心他们不会接受它,因为该补丁确实会在 lib_enchant 中。 PHP 确实在 github 上托管了自己的 lib_enchant 副本,用于构建这样的依赖项,因此他们可能会集成这些更改。

我希望这能帮助其他人。

,

我没有对 jriffel73 答案发表评论的 enauf 声誉,所以我创建了一个新答案。

我也面临在 jriffel73 答案中进行所有操作后字典数组为空的问题。所以我只是稍微改变了字典的路径,它奏效了。
来自:

C:\usr\local\share\enchant\en_US.aff

致:

C:\usr\local\share\enchant\hunspell\en_US.aff

我还授予了这些文件的所有权限