今天我遇到了一个有趣的问题,我想在这里分享一下,以节省下一个遇到相同情况的开发人员的大量麻烦。我一直在 Windows IIS 服务器上运行 PHP5 作为 FastCGI 模块,并且最近安装了 Aspell 库并在我的 php.ini 文件中启用了 pspell 扩展。我还安装了英语 Aspell 词典。但是当我开始使用 pspell 时,我遇到了模棱两可的错误,这些错误会在没有警告的情况下终止脚本执行。
因此我开始分解问题,并得出结论,以下代码成功执行了第一行,但在最后一行调用 pspell_new_config 时出错
<?php
$pspell_config = pspell_config_create('en');
$pspell_link = pspell_new_config($pspell_config);
?>
这在浏览器中返回了一个 FastCGI 错误,错误号为 -2147467259 (0x80004005)。幸运的是,我恰好想到通过命令行尝试相同的脚本,这给出了更具描述性的错误。发生的情况是,字典安装程序使用 Windows 标准 CRLF “\r\n” 而不是 UNIX 标准 “\n” 作为换行符,在 Aspell\data 目录中创建了 *.dat 文件。通过将所有这些都更改回 UNIX 标准,一切正常。它显然对这些换行符非常敏感,因此,如果您正在绞尽脑汁思考为什么 pspell_new_config 中断了您的脚本,并且您正在使用 Windows 服务器,请首先确保您的字典文件中没有任何多余的 “\r” 字符。