3.5 KiB
| title | description | weight | cSpell:ignore |
|---|---|---|---|
| PHP | <img width="35" class="img-initial" src="/img/logos/32x32/PHP.svg" alt="PHP"> A language-specific implementation of OpenTelemetry in PHP. | 21 | mbstring opcache |
{{% docs/languages/index-intro php /%}}
Further Reading
Requirements
OpenTelemetry SDK for PHP aims to support all officially supported PHP versions according to www.php.net/supported-versions, and support will be dropped for PHP versions within 12 months of that version going End of Life.
Auto-instrumentation requires PHP version 8.0+.
Dependencies
Some of the SDK and Contrib packages have a dependency on both a
HTTP Factories (PSR-17) and a
php-http/async-client
implementation. You can find appropriate composer packages implementing given
standards on packagist.org.
See
http-factory-implementations
to find a PSR-17 (HTTP factories) implementation, and
async-client-implementations
to find a php-http/async-client implementation.
Optional PHP extensions
| Extension | Purpose |
|---|---|
| ext-grpc | Required to use gRPC as a transport for the OTLP exporter |
| ext-mbstring | More performant than the fallback, symfony/polyfill-mbstring |
| ext-zlib | If you want to compress exported data |
| ext-ffi | Fiber-based context storage |
| ext-protobuf | Significant performance improvement for otlp+protobuf exporting |
ext-ffi
Fibers support can be enabled by setting the OTEL_PHP_FIBERS_ENABLED
environment variable to true. Using fibers with non-CLI SAPIs may require
preloading of bindings. One way to achieve this is setting
ffi.preload
to src/Context/fiber/zend_observer_fiber.h and setting
opcache.preload to
vendor/autoload.php.
ext-protobuf
The native protobuf library is significantly slower than the extension. We strongly encourage the use of the extension.
Setup
OpenTelemetry for PHP is distributed via
packagist, in a number of
packages. We recommend that you install only the packages that you need, which
as a minimum is usually API, Context, SDK and an exporter.
We strongly encourage that your code only depend on classes and interfaces in
the API package.