为本地主机安装 gRPC

Installing gRPC for localhost

我正在使用 Google Cloud Firestore, it requires me to install and enable the gRPC extension 的 PHP 库。我已经阅读了

的指南

Windows users can download and enable DLLs from PECL. Support for Windows is experimental

PECL 站点中,我可以看到许多指向 tgzDLL 文件的链接,但没有任何关于如何在 XAMPP 中使用或激活它们的解释本地主机

借助this link..我发现这些步骤会激活gRPC

  1. 来自 PECL site (or windows.php.net 具有完全相同的文件)..选择最新稳定版本的 DLL

  2. 根据 PHP 版本你有:

    • For XAMPP with PHP > 7.2.15 .. 选择 Thread Safe (TS) x64

    • 对于较旧的 XAMPP .. 选择 线程安全 (TS) x86

  3. 下载 ZIP 文件然后解压其内容

  4. php_grpc.dll文件复制到XAMPP中的extensions文件夹(你可以在php.ini中找到路径)..在我的如果是 extension_dir="C:\xampp\php\ext"
  5. 在您的 php.ini 文件中启用扩展程序:

    • 对于 PHP 版本 7.2 及更高版本.. 添加 extension=grpc

    • 对于旧的PHP .. 添加extension=php_grpc.dll

  6. 重新启动XAMPP,扩展将被激活,如phpinfo()
  7. 所示

对于 windows 现代 Xampp 具有 php.ini 中的语法 扩展=php_grpc

trail 中不需要 .dll 作为扩展名

请从此处下载 grpc 扩展 zip

https://windows.php.net/downloads/pecl/releases/grpc/1.10.0/

根据你的php版本(我的PHP版本是7.2.6和x86架构xampp)我下载了php_grpc-1.10.0-7.2-ts-vc15 -x86.zip

下载后解压缩 zip 文件复制 php_grpc.dll 到例如 C:\xampp\php\ext 文件夹

在动态扩展下打开 php.ini 添加扩展=grpc

重新启动您的 apache 服务器以检查打开 cmd 并输入 php -m 它会显示所有已启用的扩展。

我的 PHP 版本是 7.2。

我在 xampp/php/ext/php_grpc.dll 中下载并上传了 php_grpc.dll,并在 php.initextension=grpc 中添加了代码(在最新版本中,您不需要添加 php_ 和.dll),然后我重新启动 Xampp

现在终端显示

PHP Warning: PHP Startup: Unable to load dynamic library 'grpc' (tried: E:\xampp\php\ext\grpc (The specified module could not be found.), E:\xampp\php\ext\php_grpc.dll (The specified module could not be found.)) in Unknown on line 0

Your requirements could not be resolved to an installable set of packages.

Problem 1 - google/cloud-firestore v1.6.2 requires ext-grpc * -> the requested PHP extension grpc is missing from your system. - google/cloud-firestore v1.6.1 requires ext-grpc * -> the requested PHP extension grpc is missing from your system. - google/cloud-firestore v1.6.0 requires ext-grpc * -> the requested PHP extension grpc is missing from your system. - Installation request for google/cloud-firestore ^1.6 -> satisfiable by google/cloud-firestore[v1.6.0, v1.6.1, v1.6.2].

To enable extensions, verify that they are enabled in your .ini files: - E:\xampp\php\php.ini You can also run php --ini inside terminal to see which files are used by PHP in CLI mode.

Installation failed, reverting ./composer.json to its original content.

Windows 10 | PHP7.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/ 中的 dependency 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 安装站点上提到的 link。还有其他人在这里有 link。在 post 时,我采用了最新版本 1.24.0。我选择了线程安全版本。

我选择线程安全版本的原因是因为我收到版本不匹配的错误。您还可以通过在控制台中执行 "php -i" 来检查您的版本,其中 returns 与 phpinfo(); 相同的信息;将输出复制并粘贴到某些文本编辑器中,然后搜索 PHP Extension Build。下面是我看到的

PHP 扩展构建 => API20160303,TS,VC14

注意,它是 TS 又名线程安全的。因此,与互联网上人们下载非线程安全版本的 grpc 的其他 post 不同,我下载了线程安全并且它有效。

我想为 7.4.4 PHP 版本添加答案,

我从这个 link https://windows.php.net/downloads/pecl/releases/grpc/1.27.0/

下载了 php_grpc-1.27.0-7.4-ts-vc15-x64.zip

然后我复制粘贴php_grpc.dll到C:\xampp\php\ext文件夹

下一步我在动态扩展下打开 php.ini 添加扩展=grpc

然后重新启动,一切正常。