Immutable execution scoped propagation mechanism, for further details see opentelemetry-specification.
composer require open-telemetry/context$context = Context::getCurrent();
// modify context
$scope = $context->activate();
try {
// run within new context
} finally {
$scope->detach();
}It is recommended to use a try-finally statement after ::activate() to ensure that the created scope is properly ::detach()ed.
By default, scopes created by ::activate() warn on invalid and missing calls to ::detach() in non-production
environments. This feature can be disabled by setting the environment variable OTEL_PHP_DEBUG_SCOPES_DISABLED to a
truthy value. Disabling is only recommended for applications using exit / die to prevent unavoidable notices.
Requires an NTS build, ext-ffi, and setting the environment variable OTEL_PHP_FIBERS_ENABLED to a truthy value. Additionally vendor/autoload.php has to be preloaded for non-CLI SAPIs if ffi.enable is set to preload.
Event loops have to restore the original context on callback execution. A basic implementation could look like the following, though implementations should avoid keeping unnecessary references to arguments if possible:
function bindContext(Closure $closure): Closure {
$context = Context::getCurrent();
return static function (mixed ...$args) use ($closure, $context): mixed {
$scope = $context->activate();
try {
return $closure(...$args);
} finally {
$scope->detach();
}
};
}This repository is a read-only git subtree split. To contribute, please see the main OpenTelemetry PHP monorepo.