我下载了 OpenTelemetry Windows DLL,并在 php.ini 文件中引用了它。
php -mi
表示 opentelemetry 已加载。
php -mi | grep telemetry
opentelemetry
php -r
表示该功能存在:
php -r "print_r(get_extension_funcs('opentelemetry'));"
Array
(
[0] => OpenTelemetry\Instrumentation\hook
)
在 PhpStorm 的 PHP 解释器中还配置了确切的 PHP,因为当我从 PhpStorm 的运行按钮执行
phpinfo
时,它显示已加载的 opentelemetry。在 PhpStorm 中运行代码时我还可以获得跟踪数据,这意味着扩展有效。
但是为什么PhpStorm无法识别扩展中的函数?
PhpStorm 使用 存根文件 为自定义 PHP 扩展/模块(来自
.dll
/ .so
文件)提供的功能提供代码补全(和静态分析)。
存根文件是这些类/方法/函数/等的有限 PHP 版本,具有(可选)完整的 PHPDoc 块但空主体。总的来说,它与 C 中的
.h
文件类似。您可以在任何标准 PHP 类(例如 MySQL
或 str_replace()
)上按 Ctrl + Click并查看自己在 PhpStorm 中是如何完成的(IDE 将打开相应的存根)文件在另一个编辑器选项卡中)。更多信息:https://stackoverflow.com/a/35923482/783119
PhpStorm 将所有已知/由他们制作的存根保留在其主存储库中:https://github.com/JetBrains/phpstorm-stubs。它与每个 PhpStorm 版本捆绑在一起。
它已经包含 OpenTelemetry 的存根:https://github.com/JetBrains/phpstorm-stubs/blob/master/opentelemetry/opentelemetry.php
我在当前稳定的 2023.2.4 版本中尚未在 GUI 中看到
opentelemetry
条目 (Settings/Preferences | PHP | PHP Runtime
) -- https://www.jetbrains.com/help/phpstorm/2023.2/php.html #php-runtime-tab。这表明它将仅捆绑在下一个主要版本 2023.3 中(即将发布:下周或下两周)。除非我无法在那里找到它...
你现在可以做什么:
尝试最新的2023.3 Beta构建并找到并启用该扩展存根(它应该在那里):https://www.jetbrains.com/phpstorm/nextversion/
使用当前的 PhpStorm 版本:获取最新存根存储库的自己的副本,并在
Settings/Preferences | PHP | PHP Runtime | Advanced settings | Default stubs path
处指定路径。
但要小心这一点:升级到 2023.3 版本时,不要忘记清除它并切换回捆绑版本(过时的存根可能会导致其他问题 - 提供错误的方法签名/无法识别新添加的类/方法ETC)。或者确保自己维护最新版本的存根。
使用任何 PhpStorm 版本:只需获取单个 opentelemetry.php 存根文件并将其放置在项目中的任何位置,以便对其进行索引:IDE 将使用它来完成代码。
同样:当您升级到 2023.3 或更高版本时,最好删除此类自定义存根文件并切换到捆绑的存根文件。