Windows 10 | PHP 7.1
我尝试调试了 4 个小时,但找不到正确的解决方案。后来我意识到除了 grpc 扩展之外,还有一些其他扩展也像 oci 当我试图取消注释这些(同时保持 grpc 注释)并运行任何 php 命令(如 php --ini
在其他一些论坛上,我读到用户必须使用 Windows 安装程序手动安装 PHP,然后安装 DLL。我想我会尝试,但我找不到 MSI,所以我从 https://windows.php.net/download/ 下载了最新的 PHP zip 安装程序,我选择了 php 7.1 的 x64 版本。
请注意,我没有安装这个下载的 PHP,但我注意到它有一个 php7.dll
我曾使用 http://www.dependencywalker.com/ 的依赖项walker 来检查 php_grpc.dll 的依赖项,并发现 php7.dll 作为依赖项。
所以我所做的是将 PHP7.dll 和 php_grpc.dll 复制到 system32,然后我尝试安装该 DLL。我以管理员身份运行命令提示符并导航到 C:\windows\system32 并执行命令 regsvr32 php_grpc.dll (请注意,如果没有 PHP7.dll 存在于同一文件夹中,这将不起作用 - 或者至少它不起作用为了我)。执行后,我收到一条消息,指出 DLL 已加载但未找到入口点。这时,当我再次执行 php --ini 时(我也将 php_grpc.dll 加载到 XAMPP php 文件夹下的 ext 文件夹中),我终于收到了一个新错误,提示正在加载的模块是非线程安全的(NTS),而 PHP是 TS(线程安全)。所以我去了PECL,下载了php7.1的grpc插件的TS版本,并将dll文件粘贴到system32和ext文件夹中。我运行了 regsvr32 /U php_grpc.dll 命令,它卸载并重新安装了我相信的 DLL(我不确定这一步是否有任何区别,但我在这里提到它,因为我在调用 php --ini 之前已经执行了这一步)
在此之后,最后 php --ini 运行没有任何问题。我能够使用 composer 命令成功下载 cloud-firestore 的依赖项。浪费了 4 个宝贵的时间,但我希望这对其他人有所帮助。
注意:我没有从 PECL 下载,而是从 https://windows.php.net/downloads/pecl/releases/grpc/ 下载了 grpc zip
我不知道这是否不同,但它是安装站点上提到的用于 Windows 安装 PHP 的链接。还有其他人在这里有这个链接。在这篇文章的时候,我采用了最新的版本 1.24.0。我选择了线程安全版本。
我选择线程安全版本的原因是因为我收到了版本不匹配的错误。您还可以通过在控制台中执行“php -i”来检查您的版本,它返回与 phpinfo() 相同的信息;将输出复制并粘贴到一些文本编辑器中,然后搜索 PHP Extension Build。以下是我看到的
PHP 扩展构建 => API20160303,TS,VC14
注意,它是 TS 又名线程安全的。因此,与互联网上其他人们下载非线程安全版本的 grpc 的帖子不同,我下载了 threadsafe 并且它工作正常。