APM and distributed tracing for PHP
The Datadog PHP Tracer brings APM and distributed tracing to PHP.
License: BSD 3-Clause
| Version | Release | Download |
| 1.23.3 | 2026-07-29 | datadog_trace-1.23.3.tgz |
| 1.23.2 | 2026-07-28 | datadog_trace-1.23.2.tgz |
| 1.21.0 | 2026-06-05 | datadog_trace-1.21.0.tgz |
| 1.20.0 | 2026-05-20 | datadog_trace-1.20.0.tgz |
| 1.19.2 | 2026-05-06 | datadog_trace-1.19.2.tgz |
| Version | Message |
| 1.23.3 |
## Profiler ### Fixed - Restore OPcache restart hook on shutdown (#4076) |
| 1.23.2 |
## Tracer ### Fixed - Prevent application error handlers from replacing successful OpenFeature evaluation values with code defaults #4071 |
| 1.21.0 |
## All products ### Changed - The sidecar is now always spawned unconditionally, regardless of configuration #3912 ### Internal - Bump Rust MSRV to 1.87 #3926 ## Tracer ### Added - Add PHP feature flag evaluation including evaluation metrics via OTLP #3906, #3909, #3910, #3911 - Add `dynamic_service` DBM propagation mode as a convenience alias for `service` mode with base hash injection; this mode will replace `service` on the long term #3940 - Add `DD_DBM_ALWAYS_APPEND_SQL_COMMENT` to unconditionally append SQL comments in DBM regardless of sampling #3954 - Recognize PCF Garden container IDs for Cloud Foundry deployments DataDog/libdatadog#2025 ### Fixed - Fix remote config not being delivered after forking #3958 - Fix span pointer invalidation crash during inferred span serialization with `DD_TRACE_INFERRED_PROXY_SERVICES_ENABLED` #3934 - Fix buffer overflow in autoload path construction for oversized class/path names #3932 - Fix Swoole integration parsing the POST body regardless of `DD_TRACE_HTTP_POST_DATA_PARAM_ALLOWED` #3931 - Guard JIT blacklist rewrite to prevent crashes with non-tracing JIT metadata #3929 - Fix OTel polyfill post hooks with `:void` return type overwriting the instrumented function's actual return value #3920 - Fix span stats broken for nested services due to incorrect `top_level` span detection #3916 - Fix `php.compilation.total_time_ms` reporting values 1000x too large (microseconds labeled as milliseconds) #3915 (thank you @dortort!) - Fix memory corruption of INIs in ZTS builds #3898 - Fix data race in curl header assignment (non-atomic write to `_Atomic` field) #3945 - Fix sample rate normalization to 0..1 range, preventing incorrect Knuth hash computation #3935 - Fix multi-request failures caused by incorrect rinit ordering after tracer/ext split #3946 ### Internal - Split the tracer code into a separate `tracer/` directory within the extension #3912 - Improve crashtracker reliability: socket-based thread collection, incomplete stack handling, and `language:native` tag DataDog/libdatadog#2080, DataDog/libdatadog#2079, DataDog/libdatadog#2083 ## Profiling ### Fixed - Fix macOS release builds for the profiler #3923 ### Internal - Support PHP DEBUG builds for the profiler, enabling ASAN testing in CI #3908 ## AppSec ### Added - Collect `x-datadog-endpoint-scan` and `x-datadog-security-test` security testing headers as span tags on HTTP entry spans, independent of `DD_TRACE_HEADER_TAGS` and AppSec enablement #3925 ### Fixed - Fix out-of-bounds iteration in PHP <8.1 backtrace `HashTable` loop in the AppSec backtrace collection path #3933 |
| 1.20.0 |
## All products ### Fixed - Properly reset SSI loader global state on shutdown to cleanly support reloading #3881 ### Internal - Spawn the sidecar via dynamic linker instead of trampoline #3869 ## Tracer ### Added - Add support for OpenTelemetry logs (`DD_LOGS_OTEL_ENABLED=true`, disabled by default) #3748 ### Changed - Crashtracking now collects stack traces from all threads at the moment of a crash #3866 ### Fixed - Fix NULL dereference crash in ZTS mode during sidecar/telemetry shutdown #3886 - Ensure remote config processing happens strictly after request initialization #3882 - Strip libpq-style paired quotes from PostgreSQL `dbname` DSN value in PDO integration #3885 - Fix use-after-realloc crash in tracestate formatting #3874 ## Profiling ### Fixed - Prevent panics in profiling encoding under out-of-memory and out-of-bounds conditions #3888 ## AppSec ### Added - Add AppSec integrations to Laminas Framework (http.route, endpoint collection, login events) #3716 ### Changed - Update recommended ruleset to v1.18.0, adding Stripe and LLM endpoint detection rules #3859 ### Fixed - Treat cleared shared memory as no-config rather than an error in AppSec helper #3876 - Avoid the possibility of sensitive data going to the telemetry logs backend via WAF strings #3884 ### Internal - Fix `blocked_request` metric tag detection in AppSec helper #3863 - Add `block` tag to `rasp.rule.match` metric #3870 - RFC-1012 metrics improvements: WAF duration distributions, rule_variant tag, and tag fixes #3850 |
| 1.19.2 |
## Tracer ### Changed - Restrict the accepted amount of extracted tags and baggage #3854 ### Fixed - Fix parentId refcount underflow #3851 - Fix SpanStack active reference corruption #3853 - Retry FFI telemetry batches when session config not yet available DataDog/libdatadog#1929 - Fallback to ftruncate if fallocate gets EPERM DataDog/libdatadog#1938 |