datadog_trace: Changelog

Version Message
1.5.1 ## Tracer

### Added
- Add mysqli_real_query to MysqliIntegration #2965

## Application Security Management

### Fixed
- Bridge more musl/glibc diffs in aarch64 Datadog/nginx-datadog#140
1.5.0 ## Tracer

### Added
- PHP 8.4 support #2758
- Support Tag Keys for DD_TRACE_HEADER_TAGS #2922
- Add stubs for the Public PHP API #2933
- These are available as datadog_tracer.stubs.php release asset
- Collect agent info and apply the env for remote config #2930

### Changed
- Increase read timeout of sidecar for synchronous flushes #2910
- Implement Universal Service Tracking Consistency #2896
- Updating Default Rate Limit Value and Usage Based on Sample Rate #2912

### Fixed
- Fix a possible crash in zai config #2906
- Fix crash when yielding from generators are destroyed #2908
- Fix bad hasThis() check on PHP 7.0 #2911
- Fix RootSpanData writer interception on consecutive calls #2919
- Fix DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP Empty Value Behavior #2909
- Handle hooks on trampoline fake closures #2925
- Fix crash with locals collection in generator close sequence #2932
- Avoid the hook frame in mysqli connection error tracking #2937
- Support multiple PHP_INI_SCAN_DIR's #2941
- Fix use-after-free in exception replay #2947
- Fully disable the sidecar on lambda by setting all related configs to false #2948
- Fix Symfony Messenger propagation to non-instrumented clients #2956
- Fix JIT crash: There may or may not be a readable ZEND_TRACE_OP_INFO() #2942
- Block remote config signals during ftp functions #2957
- Deduplicate Debugger diagnostics in sidecar Datadog/libdatadog#736
- Handle case where the applictaion is stopped without other telemetry sent Datadog/libdatadog#743

### Internal
- Create many tiny artifacts for faster download #2951
- Using datadog-setup.php will now download less than 50 MB for a single PHP version
- Add names to memfds Datadog/libdatadog#714
- Allow attaching to the sidecar via gdb Datadog/libdatadog#687

### SSI Loader changes
- Fix compatilibity with PHP 5 #2939
- Fix crash when the loader is loaded multiple times #2954

## Profiling

### Added
- Add fatals and thread start/end events to timeline #2820
- Add thread names #2934
- Add timeline active check for fatals #2945
- Add stream_select()-type functions to timeline #2943
- Visualise opcache restarts in the timeline #2946

## Application Security Management

### Changed
- Disable helper when appsec is fully disabled #2935

### Fixed
- Fix heap corruption after apache reloads (appsec) #2928

### Internal changes
- Update spdlog so it works with recent musls #2921
- Bump libddwaf to 1.20.1 #2913
1.4.2 ## Tracer

### Changed
- Disable sidecar sending on lambda #2904

### Fixed
- Fix exception property offset computation for PHP 8.1+ #2901
- Prevent Laravel Queue hooks from stacking up #2899
- Fix crash with missing name in span in debug mode #2893
- Restrict remote config path to a definite 31 chars DataDog/libdatadog#676

## Application Security Management

### Changed
- Update event obfuscation regex #2897

### Fixed
- Fix abort() call on appsec helper unload #2900
1.4.1 ## Tracer

### Fixed
- Fix: MongoDBIntegration condition typo #2884
- Fix crash in profiler when span stack switch causes GC run #2885
- Support build with disabled zend signals #2886
- Send git tags via remote config #2890
- Fix memory leak with sidecar trace sender #2875

## Profiling

### Fixed
- Fix profiler ZTS build on alpine #2887

## Application Security Management

### Fixed
- AppSec: improve behavior with empty DD_SERVICE/DD_ENV #2888
1.4.0 ## Tracer

The default value for datadog.trace.cli_enabled is now set to true (except for composer), meaning that CLI processes will be traced by default.

### Added
- Dynamic configuration #2796
- Dynamic instrumentation #2796
- Can be enabled with datadog.dynamic_instrumentation.enabled=1.
- Exception replay #2796
- Can be enabled with datadog.exception_replay_enabled=1.
- Track peak memory usage in root span metrics #2840

### Changed
- Enable sidecar trace sender on PHP 8.3 #2729
- Optimize sending traces via sidecar Datadog/libdatadog#598
- Add new ini config datadog.crashtracking_enabled #2850
- Add ionCube to the list of incompatible extensions + add INI setting to ignore incompatible extensions #2858
- Enable CLI by default #2871

### Fixed
- Crashtracker: fix a use-after-free error #2843
- Fix curl integration race condition #2847
- Fix memory leak with sidecar trace sender #2875
- OpenTelemetry: Missing addLink method and Fiber handling #2849
- Mongodb: Deprecated exception in v1.20+ #2870
- Fix leaking sidecar sessions Datadog/libdatadog#642
- Implement deadlock watchdog for sidecar Datadog/libdatadog#647

### Internal
- Fix testsuite flakiness #2841, #2846, #2848, #2867
- Fix telemetry metric name Datadog/libdatadog#666

### SSI Loader changes
- Add SSI requirements.json file #2813
- Disable the tracer in case of a potential incompatibility (extension/jit) #2853

## Profiling

### Internal
- bump to Rust 1.76 #2876

## Application Security Management

### Changed
- Move helper to sidecar remote config #2864

### Fixed
- Fix improper symbol exports in appsec ext/helper #2854
- Remove gid from socket/lock path of helper #2855
- appsec ext: retry on connection refused #2860
- Fix orderly helper appsec shutdown #2859

### Internal changes
- Add appsec benchmarks #2791
1.3.2 ## Tracer

### Fixed
- Fix crash with git metadata injection
1.3.1 ## Tracer

### Fixed
- Fix DD_AUTOLOAD_NO_COMPILE #2833
- Loader: Use the same version number as for other extensions #2838
- Consider ifunc symbols also defined Datadog/libdatadog#609
- Fix crash with double parent key in tracestate #2837
- Fix #2831: Failure with LTO #2839

### Internal
- Avoid using non-bundled rust git dependencies #2827
1.3.0 ## Tracer

The default value for datadog.log_backtrace is now set to true, meaning that on compatible systems, a segmentation fault will cause the process's backtrace to be printed in the log.

### Added
- Add SpanEvents support for DD and OTEL #2754
- Symfony Messenger Integration #2749
- Add crashtracker #2763

### Changed
- Updates the expected telemetry tags for OTel env-var mapping in line with the latest RFC #2775

### Fixed
- Multiple Workers in SWOOLE_BASE mode #2778
- Fix ini creation when `--extension-dir` is used #2789
- Fix fatal error when reading uninit $meta on a span #2790
- Fix JIT crash with instrumented generators #2797
- Handle absolute paths in extension_dir containing forward slashes #2798
- Fix setup with spaces in path to php binary #2803
- Fix #2774: shared hooks removal caused xdebug end handler to be skipped #2780
- Fix error message for not loaded/not available #2810
- Implement fallback for when memfd is not available on Linux Datadog/libdatadog#591
- Use the Windows User ID as sidecar identifier instead of the Session ID Datadog/libdatadog#558
- Fix error check in trampoline.c Datadog/libdatadog#569
- Do not implicitly fall back to spl_autoload() if no autoloader is registered on PHP 7 #2822
- Prevent crash in shutdown if hook was not stored #2824

### Internal
- Send x-datadog-test-session-token metric and send metrics to request-replayer #2802
- Only warn on missing `json` extension #2805
- Fix compilation after alpine container upgrade #2811
- Telemetry v2 schema for app-started payload requires 'configuration' Datadog/libdatadog#543

## Profiling

### Added
- Add timestamp to exception sample #2793

### Internal
- Perf: remove profiler mutex #2714

## Application Security Management

### Added
- Automated user ID collection modes #2782
- Report backtraces #2715

### Changed
- Support loading appsec helper in sidecar Datadog/libdatadog#565

### Fixed
- Refactor the sampler to fix errors #2761
1.2.0 This release adds beta support for PHP Single Step Instrumentation, allowing the instrumentation
of your PHP applications without the manual installation of the dd-trace-php extension.

Read https://docs.datadoghq.com/tracing/trace_collection/automatic_instrumentation/single-step-apm/ for
more details.

## Tracer

### Added
- Add span field meta_struct #2673
- Add config to disable obfuscation in memcached queries #2725
- Add PDO spans to orphans removal #2743
- Make generators replaceable #2718
- Source Code Integration #2731
- OpenAI Integration #2685
- Add support for Single Step Instrumentation #2684 #2723

### Fixed
- Fix PHP binary detection in package post-install script #2707
- Handle OTel HTTP semantic conventions < 1.21.0 #2717
- Respect the active service/env/version for metric tags #2742
- Fix post bailout hook execution in 8.3 unoptimized builds #2737
- Fix env&version tags leaking in metrics #2745
- Fix global priority sampling #2728
- Fix crash in OpenTelemetry Span::getCurrent() when accessing span link #2767

### Internal
- Compile sidecar and extension separately, to link them together later #2741
- Sync with libdatadog for telemetry flush data intval #2757

## Profiling

### Internal
- Keep string cache data alive longer #2668
- Extract func is_internal() #2736
- Less unsafe code #2739
- Refactor fork handling #2747

## Application Security Management

### Fixed
- Refactor the sampler to fix errors #2761

### Internal
- Upgrade helper to use WAF 1.18.0 #2660
- Add more logs around schema extraction #2755
1.1.0 ## Tracer

### Added
- Implement OTel config remapping #2691
- Remap OTel to DD status code #2695

### Fixed
- Apply some fixes with sidecar trace sender #2680, #2686, #2689, #2698, #2700
- Don't treat Symfony 2 differently from other versions #2693
- Ensure DDTRACE_G(active_stack) is always NULL when the root span is being pushed #2701

### Internal
- Switch 2 logs to logev to avoid useless work #2679
- shrink size of Rust artifacts #2696

## Profiling

### Added
- Add `thread id` label on every sample #2692

### Internal
- Reduce memory usage by upgrading libdatadog to v10 #2697
1.0.0beta1 This beta release contains all breaking changes planned for dd-trace-php 1.0. An upgrade guide can be found at https://github.com/DataDog/dd-trace-php/blob/1.0.0beta1/UPGRADE-1.0.md.

## Tracer

### Added
- Add --ini and --extension-dir installation option #2620
- CodeIgniter 3 Compatibility #2515
- Add CakePHP 3+ Support #2618

### Changed
- Cleanup deferred loader and remove some PHP 5 compat code #2527
- Change DD_TRACE_SAMPLING_RULES_FORMAT default from regex to glob #2534
- Raise API errors instead of debug logs when wrong arguments are passed #2542
- Change WordPress Default Behavior #2525
- [OTel] Only set resource info on root spans #2558
- Remove early code execution and use an autoloader instead #2530
- Remove deprecated configuration keys or APIs #2574
- Drop Configuration classes from API #2596

### Fixed
- Elasticsearch: Hook not being removed #2616
- Fix shared compilation on macOS
- Fix host Scopes not being removed #2624
- Add note about update_span_duration semantics #2622

### Internal
- Use a global version and change installer tests to use the version #2537
- Clean PHP 5 checks #2584
- Collect 'logs_created' internal metric #2604
- Make the root Makefile macOS compatible #2614
- Add stats reporting for sidecar and telemetry #2621
- Clean Integration configuration #2598
- Re-added spans_created telemetry metric Datadog/libdatadog#391

## Application Security Management

### Fixed
- Disable Appsec when FrankenPHP SAPI is detected #2617
0.99.1 ## Tracer

### Changed
- revert ?Send spans_created telemetry metric #2577? to fix a memory leak

### Fixed
- Fix compilation on macOs #2613
0.99.0 ## Tracer

Windows x64 support is officially GA (generally available).

Some performance work has been undertaken to primarily reduce the overhead of telemetry reporting.
The next release will be version 1.0 and remove deprecated and some unused code and APIs.

### Added
- Support the [FrankenPHP](https://frankenphp.dev/) SAPIs #2602
- Add zts support for alpine #2564
- Swoole Integration #2595

### Changed
- w3c phase 2: add last parent_id to tracestate #2549

### Fixed
- Handle relative ext/ paths and test the windows installer #2559
- Fix exec integration build on PHP 8.4 #2543
- Fix Orphans not being sampled-out #2550
- Fix fibers with tracer disabled #2576
- Update update_span_duration return type #2586
- Fix #2563: ddtrace overrides php error log permissions #2583
- Allow hooking an inherited internal constructor #2591
- Distinguish architectures on windows #2593
- Fix the ExecIntegration name #2597

### Internal
- Get rid of some bitwise checking in ddog_shall_log #2539
- Use faster bincode for ipc #2544
- Update to use DDOG_CHARSLICE_C and new DDOG_CHARSLICE_C_BARE helpers #2565
- Slightly Improve OTel Performances #2561
- Send spans_created telemetry metric #2577

## Profiler
### Added
- add [FrankenPHP](https://frankenphp.dev/) to the list of recognised SAPIs #2523
- enabled allocation profiling for PHP ZTS #2506
- report PHP build (`nts-ndebug` vs `zts-ndebug`) #2536

### Internal
- add tests for exception profiling in ZTS builds #2562
- update to libdatadog v7 #2605

## Application Security Management
### Added
- Add DD_API_SECURITY_ENABLED flag #2532
- Add DD_APPSEC_SCA_ENABLED new configuration variable #2557

### Fixed
- Make Laravel appsec login success event more accurate #2600
- Enable appsec by ini only when enable-appsec present #2567
- Provide path params to appsec #2395
0.98.1 ## Tracer

### Fixed
- Always include the whole of src/ in the Windows and PECL build (#2533)
- Ensure the permissions of the log file are actually really 0666 (#2528)
- Avoid remapping freed memory in trace sender fallback (#2541)
- Fix possible crash in dd_patched_zend_call_known_function on early PHP 8.0 and 8.1 versions (#2548)
- Make ddtrace_disable a true global to avoid crashes in ZTS with unsupported SAPI/extensions (#2545)
0.98.0 ### Fixes across all extensions
- Handle Apache graceful restarts more accurately #2483
- Mark config as immutable and interned to avoid refcounting race conditions #2516

## Tracer
This release includes Windows dlls for the tracer starting with PHP 7.2. #2230

Windows support is in beta. We recommend carefully deploying the tracer to staging environments and testing it there before putting it to production. We are looking towards stabilizing Windows quickly, so any feedback and issue reports are welcome.

### Added
- Enhance logging #2490
- This features two new logging options:
- `datadog.trace.log_level` allows more fine-grained control over logging (`error`, `warn`, `info`, `debug`, `trace`). It follows the RUST_LOG standard. Note that `datadog.trace.debug` still takes precedence if set.
- `datadog.trace.log_file` allows specifying a dedicated target file for any datadog trace logs instead of the default php error location.
- More log lines were added to allow for observing submitted spans (debug level) and hook invocations (trace level).
- Add http.route to Wordpress #2491

### Changed
- Have datadog.trace.db_client_split_by_instance also affect mysqli and sqlsrv #2508
- Record nested exceptions in the integrations #2514
- Evaluate numbers and bools in tags and metrics for sampling rules #2521

### Fixed
- Access to undefined method `attempts` in LaravelQueueIntegration #2485
- Include generated curl_exec spans of curl_multi_exec() in metrics #2505
- Remove Symfony Command Hook After Execution #2492
- Add zend_try around closing and flushing spans #2507
- Make PDO split-by coherent with other DB split-by with service name flattening #2524

### Internal
- No longer compile the mockgen as part of the rust build #2512
- Add TEA Benchmarks #2438
- Reduce CI and Local Flakiness #2496, #2518

## Profiling
This release requires System INIs to be used to configure the profiler settings which control the enabling/disabling of individual features. If you are configuring the profiler using `php datadog-setup.php config set`, you should be fine. We recommend switching to use the [config mode of datadog-setup.php](https://docs.datadoghq.com/profiler/enabling/php/?tab=gnuclinux#installation) to configure profiling.

### Added
- Enable timeline by default #2480. This can be disabled by setting the INI setting datadog.profiling.timeline_enabled to 0 or false. Using the datadog-setup.php script is recommended, for example:

php datadog-setup.php config set --php-bin all -ddatadog.profiling.timeline_enabled=0
- PHP ZTS support for CPU- and Wall Time profiling #2470
- Add exception message to exception sample (opt-in) #2434

### Changed
- Breaking-change: require system INIs for profiling features #2468

### Internal
- Update dependencies and pin `ahash` #2479
- Fix clippy::single-match #2482
- Update to libdatadog 6 #2513
- Refactor: use SystemSettings in locals #2487
- Fix accidentally skipped tests #2517

## Application Security Management
This release introduces support for the Roadrunner application server and extends threat detection and blocking on XML and JSON request payloads. Request and response payloads are now also used to expand the already existing API security features.

### Added
- Roadrunner appsec support #2443
- Provide server.response.body #2489
- Support json/xml request bodies #2499

### Changed
- Change ip header parsing/header reporting #2503

### Fixed
- Fix blocking on PHP 7.0-7.1 ZTS #2502
- Ensure logs are committed to disk upon shutdown #2495

### Internal
- Upgrade libddwaf and ruleset #2520
0.97.0 ## Tracer
### Added
- Add span links capabilities to the OTel API #2451
- Add exec integration #2361, #2455, #2459

### Changed
- Implement http.route for Yii #2430
- Implement http.route for Slim #2402

### Fixed
- Remove Symfony controller hook after execution #2436
- Move the dummy function of call_attribute_constructor onto the VM stack #2446
- Avoid resolving unresolved functions and classes #2450
- Fix removal of the directly accessed hook after binding in DDTrace\remove_hook #2449
- Handle async requests using Guzzle #2460
- Fix removing an end observer with other observers active #2469
- Fix fibers on PHP 8.1.2 #2473

### Internal Changes
- Add MicroBenchmarks #2435, #2456, #2458
- Add Symfony 7.0 test suite #2437
- Track DD_TRACE_DEBUG=1 errors in integration and web tests #2472
- Reduce noise in composer package download #2401

## Profiling
### Added
- prevent emitting empty profiles #2397

### Fixed
- potential allocation profiling crashes with certain opcodes #2352

### Internal Changes
- test with address sanitizer on bookworm with GH actions #2432
- make the profiler compile in ZTS PHP #2463
- extract wall_time.rs file #2467

## Application Security Management
### Internal changes
- Change schema extraction zip compression to PHP_ZLIB_ENCODING_GZIP #2447
0.96.0 Exception profiling is now enabled by default. You can manage it using the `DD_PROFILING_EXCEPTION_ENABLED` environment variable or the `datadog.profiling.exception_enabled` setting in the INI file. Although the `DD_PROFILING_EXPERIMENTAL_EXCEPTION_ENABLED` environment variable and `datadog.profiling.experimental_exception_enabled` INI setting still work, the new ones take precedence.

## Tracer

### Added
- Implement extended sampling #2384

### Fixed
- Add PHP 8.3 to supported versions #2417 (thank you @markwalet)
- OTel: Fix analytics.event override (#2409)
- Fix dddbs service mapping #2413
- WordPress: Avoid Setting User ID When Unauthenticated #2424

### Internal Changes
- CI: Handle latest Alpine 3.19 image #2418
- CI: Complements PHP 8.3 test suites #2419

## Profiling

### Added
- GA exception profiling #2403
- allow enabling all experimental features using `datadog.profiling.experimental_features_enabled` #2385

### Internal Changes
- run prof-correctness nightly in `master` branch #2420
0.95.0 This release introduces support for arm64 and PHP 8.3 for appsec. Additionally, it adds schema extraction and classification to appsec, which forms the foundation for API security. Finally, the appsec extension has been officially incorporated into the dd-trace-php repository and will adhere to the same versioning scheme as the tracer and profiler.

## Tracer
### Added
- Add http.route to CodeIgniter #2379

### Fixed
- Use http_code instead of connect_time to detect curl errors #2391
- Fix handling of invalid persistent JSON #2381
- Zero pad the tid and exclude it from OTel tracestate #2386

### Internal changes
- Update CI images to use PHP 8.3.0rc6, pin mongodb for PHP 7.2-7.3 #2382
- Update CI images to 8.1.26, 8.2.13 and 8.3.0 and XDedug to 3.3.0 #2400 #2405
- Add macrobenchmark runs #2408

## Profiling
### Internal changes
- add allocation and exception count to event.json #2392

## Application Security Management
### Added
- Implement sampler and processor trigger DataDog/dd-appsec-php#308
- Zip long schemas DataDog/dd-appsec-php#315
- Add compression library to helper DataDog/dd-appsec-php#316
- Always serialize schemas when available #2406
- Upgrade libddwaf to v1.15.1 #2377
### Internal changes
- Fix fuzzer build & increase RSS limit DataDog/dd-appsec-php#313
- Build AppSec extension & helper in CI with support for Arm64 and PHP 8.3 #2344
- AppSec extension & helper unit tests in CI #2349
- Package appsec using new builds #2369
0.94.1 This release fixes a regression in the profiler which would make it emit profiles even though the profiler is disabled.

## Profiler
### Fixes
- do not emit profiles when profiler is disabled #2393
0.94.0 This release adds support to OpenTelemetry so that you can use the OpenTelemetry API to generate Datadog spans. This is off by default. Enable it with the environment variable `DD_TRACE_OTEL_ENABLED=1` or INI setting `datadog.trace.otel_enabled=1. Also, the tracer now generates 128 bits trace ids by default, in an effort to match OpenTelemetry standards.

## Tracer
### Added
- Set _dd.base_service when overriding service name for a span #2275
- OpenTelemetry API #2332
- Add tracing for curl_multi_exec() #2347
- CakePHP http.route implementation #2360

### Changed
- Enable 128-bit trace ID generation by default #2358, #2368
- Respect DD_LOGS_INJECTION default value #2365
- Completely avoid instrumenting the PSR NullLogger #2367
- Inject the _dd.dbm_trace_injected tag only when full propagation is enabled #2346
- Retain tracestate from tracecontext if extracted at all #2359

### Fixed
- Handle extra arguments for internal overrideArgs #2348
- Fix possible double-free with hooks on internal methods inherited by user classes #2372
- Fix crash with functions with no run_time_cache yet #2373
- Workaround php bug #81634 in PHP 8.0-8.1.0 #2353
- Fix PHP5: The Magento Integration is not part of PHP5 #2363
- Fix orphans removal when 128-bit is enabled #2366
- Use _dd.agent_psr instead of _dd.rule_psr for agent sampling #2370

### Internal changes
- Add xfail for Zend/tests/stack_limit/stack_limit_013.phpt on PHP 8.3 #2371

## Profiling
### Added
- Add idle phases to timeline #2343

### Fixed
- perf: increase allocation sampling distance #2350, #2364

### Internal changes
- add DD_PROFILING_WALLTIME_ENABLED for testing #2316
0.93.2 ## Tracer
### Fixed
- [PDO] injectDBIntegration should be public. #2351
0.93.1 ## Tracer
### Fixed
- Reset distributed context on request init #2340
0.93.0 This release adds support for PHP 8.3 for the tracer and the profiler. Please be aware that we are currently building against PHP 8.3.0 RC3.

## Tracer
### Added
- Add Magento 2 Integration #2274
- Support for PHP 8.3 #2098, #2282
- Add a configuration flag to disable laravel queue distributed tracing #2304
- Laminas RESTful methods handling #2322
- Expand arrays in meta and metrics into nested-tag format #2302, #2333
- Report extensions used in telemetry #2295

### Changed
- Redis Span Removal and Priority Sampling Orphans Cleanup #2306
- Subclass SpanData with RootSpanData #2309
- Refactor tightly coupled extraction state #2314

### Fixed
- Propagate env to telemetry #2313
- Fix ZAI config handling for .htaccess with php-fpm #2298
- Explicitly drop dd.p.dm if provided in propagated tags when the incoming sampling priority is reject #2310
- Strictly validate dd.p.tid #2303
- Fix PHP 5: The Drupal integration is not part of PHP 5 #2326
- Avoid %.*s in places where longer strings are used #2330
- Respect service mapping when propagating for DBM #2321
- Specify the odbc driver in db.system and exclude the Ingres driver from DBM #2334
- Fix daemonization of sidecar closing stderr properly DataDog/libdatadog#271

## Profiling

### Added
- Support for PHP 8.3 #2098, #2282

### Fixed
- neighboring extension handling in `gc_mem_caches()` #2297
- panic after shutdown of forked child when `USE_ZEND_ALLOC=0` #2301
- fix typo in info log message #2307
- sampling distance in exception profiling #2323
- reuse thread RNG and poisson sampler #2320

### Internal changes
- fix reliability environment deployment #2289
- upgrade to `libdatadog` v5 #2299
- add memory benchmark #2319
- fix flaky exception correctness test #2331

## Application Security Management (0.14.3)
### Fixed
- Set sampling priority using ddtrace_set_priority_sampling_on_root DataDog/dd-appsec-php#311
0.92.2 ## Tracer
### Fixed
- Fix ZAI config handling for .htaccess with php-fpm #2298

## Application Security Management (0.14.2)
### Fixed
- Always update enabled status on RINIT DataDog/dd-appsec-php#307
- Fix ZAI config handling for .htaccess with php-fpm #2298
0.92.1 ## Tracer
### Fixed
- Handle UnwindExit in sandbox error reporting #2288
- Add a safeguard nullcheck for the sidecar into telemetry reporting #2293

## Profiling
### Fixed
- Do not leak module entry on purpose #2291
- Fix allocation profiling shutdown with USE_ZEND_ALLOC=0 crashing #2294

## Application Security Management (0.14.1)
### Fixed
- Improve tracer state detection DataDog/dd-appsec-php#305
- Fix setting perdir INI setting for multiple ZAI config users #2277
0.92.0 This release adds experimental exception profiling to the profiler. This is off by default. Enable it with the environment variable DD_PROFILING_EXPERIMENTAL_EXCEPTION_ENABLED=1 or INI setting datadog.profiling.experimental_exception_enabled=1.

In Application Security Management, this release introduces the latest version of the WAF v1.14.0 and the latest ASM ruleset v1.8.0, as well as a fix to ensure runtime IDs reported by the remote configuration client are always valid and consistent with those reported by the Tracer.

## Tracer
### Added
- Add Drupal Integration #2188
- Implement sidecar tracing #2234
- This functionality is currently experimental and guarded behind a configuration option DD_TRACE_SIDECAR_TRACE_SENDER=1 or INI setting datadog.trace.sidecar_trace_sender=1. It replaces the sending of traces through a dedicated thread.

### Fixed
- Do not emit a deprecated diagnostic for DD_LOGS_INJECTION #2253
- Set peer.service as dddbs when available #2260
- Fix toggling datadog.trace.enabled with perdir configuration #2269
- Enable auto flush for artisan commands #2270

### Internal changes
- Keep doctrine/dbal to major version 2 in symfony 5.2 tests #2254
- docs: Explain minimum and nice-to-have from LLVM #2264

## Profiling
### Added
- Add exception profiling #2197, #2262
- Do not disable allocation profiling on fixed PHP versions with active JIT #2246

### Fixed
- Add missing `end_timestamp_ns` to string compilation event #2251
- store customized heap #2261
- remove ?BETA? in `datadog-setup.php` as the profiler is not beta anymore #2278
- use-after-free with Closure trampolines #2280

### Internal changes
- add tests for timeline #2192

## Application Security Management (0.14.0)
### Added
- Add default processors and scanners DataDog/dd-appsec-php#298
- Exchange more types between extension and helper DataDog/dd-appsec-php#299
- API security configuration settings DataDog/dd-appsec-php#300

### Fixed
- Propagate Runtime IDs and keep a valid pool in the RC client DataDog/dd-appsec-php#301

### Internal changes
- Add nginx container to integration tests DataDog/dd-appsec-php#294
- Upgrade WAF to 1.14.0 DataDog/dd-appsec-php#295
- Upgrade tracer to v0.91.0 and remove master build downloads DataDog/dd-appsec-php#296
- Upgrade ruleset to 1.8.0 DataDog/dd-appsec-php#302
- Merge appsec repository as subtree #2267
0.91.2 ## Tracer
### Fixed
- fix: Use DD_SERVICE if available (Laravel) #2256
0.91.1 ## Profiling
### Fixed
- detect an uninitialized runtime cache #2250
0.91.0 This release adds an enhanced WordPress integration, which can be enabled through datadog.trace.wordpress_enhanced_integration=1 in INI. Even more extensive span collection can be enabled through datadog.trace.wordpress_callbacks=1.

### Added
- Add automated login events to Wordpress #2162
- Enhance the WordPress Integration #2126
- Implement agent sampling #2223
- Add Laravel 9.X & 10.X tests #2237
- Add http.route to laravel #2204 #2241

### Fixed
- (Legacy OpenTracing API) Check if the active span has a parent #2177
- Handle killed workers and change root span initialization in the integrations #2176
- fix: add Symfony command's exception to the root span #2194
- Fix #2174: Can't pass less args to an untyped function than originally passed #2227, #2243
- Fix #2232: Add Cargo.lock to pecl #2233
- fix: wrong service name on some laravel.event.handle spans #2235
- fix: PHP7 compatibility in logs correlation #2236
- Store library_dependencies in memfd, referenced via /proc/self/fd/X DataDog/libdatadog#221
- fix `datadog-setup.php` when INI file is a symlink #2242
- update webpki and other dependencies #2247

### Internal Changes
- Add log levels #2158
- Add `zai_option_str` and use it in config #2205, #2213
- Refactor zai_string_view APIs and use them more #2203
- Rename zai_string_view to zai_str #2206, #2207, #2212
- Require zai_str.ptr to not be null #2214
- Add zai_string and use it in zai_config #2217
- Fix tests: allocate less TLS space by putting uhook HashTables into module globals #2219
- Add sidecar metrics into their own namespace, fix seq id Datadog/libdatadog#220

## Profiling

This release reduces CPU overhead to collect stacks, and also reduces overhead when services are idle or partially idle. It also reduces the average amount of memory used.

### Added
- attach fiber's function name as a label #2169

### Fixed
- enable allocation profiling only if profiling is enabled #2185
- enable timeline only if profiling is enabled and lower overhead when disabled #2189
- fix empty profiles with timeline due to `end_timestamp_ns` unit being set #2244

### Internal changes
- perf: speed up stack walking by using function run_time_cache #1998, #2182
- perf: only wake every 10ms if PHP is serving a request #2168
- refactor: extract ZaiStringView::to_string #2175
- build: update Cargo.lock #2183
- refactor: simplify string tables #2186
- perf: use u32 instead of usize for string table indices #2187
- test: add Datadog\Profiling\trigger_time_sample #2201
- build: Update to Rust 1.71 / LLVM 16 #2208
- Bump libdatadog to v3.0.0 #2210
- fix(profiling): clippy lints #2215
- style(profiler): use let-else syntax #2216
- build(profiling): bump dependencies including libdatadog v4.0.0 #2228

## Application Security Management (0.13.1)

### Added
- Add trusted IPs capability DataDog/dd-appsec-php#279
- Add extra_services configuration DataDog/dd-appsec-php#282

### Fixed
- Ensure ddtrace is also enabled DataDog/dd-appsec-php#281
- Fix service name alias configuration DataDog/dd-appsec-php#293

### Internal changes
- Add automated login events integration test for Laravel and Symfony DataDog/dd-appsec-php#270
- Upload suppressions and fix current ones DataDog/dd-appsec-php#280
- WAF upgrade to 1.13.1 Datadog/dd-appsec-php#292
- Send events even when limiter does not force manual keep Datadog/dd-appsec-php#290
- Update ruleset to 1.7.2 Datadog/dd-appsec-php#291
0.90.0 This release adds logs correlation and telemetry support:
- Used configurations, libraries and integrations will be collected. This may be disabled with `DD_INSTRUMENTATION_TELEMETRY_ENABLED=0`.
- Logs written by common logging libraries will be attached metadata about the trace and span the log line was generated in. This may be disabled with `DD_LOGS_INJECTION=0`.

### Added
- Add Logs Correlation #2118
- Add network destination name to http client spans #2134
- Add peer.service to Mysqli instrumentation #2142
- Add peer.service to PHPRedis instrumentation #2152
- Add peer.service to PDO instrumentation #2148
- Add peer.service to SQLSRV instrumentation #2155
- Add peer.service to Mongodb instrumentation #2147
- Add peer.service to Memcached clients instrumentation #2145
- Add peer.service to http client instrumentations #2134
- Add automated login events to Symfony #2132 #2146
- Opt-in to flat service names #2163

### Changed
- Move all integrations to deferred loading #2153
- Reflect changes to datadog.version and datadog.env in existing spans #2165
- Evaluate the service name after the service mapping for a sampling decision #2166

### Fixed
- Add invalid regex handling for sampling rules #2160

### Internal Changes
- Add SpanData::peerServiceSources #2130
- Handle peer.service-related post-process in the extension #2135
- Enable instrumentation telemetry by default #2153

## Profiling

### Added
- doc(profiling): make phpinfo() output more helpful #2144
- timeline: add eval() timings #2150

### Fixed
- Explicit shutdown allocation profiling on fork() #2149
- Optimize event timestamp for timeline #2157

### Internal changes
- refactor(profiling): apply clippy suggestions #2141
0.89.0 This release adds timeline support to the profiler. This is off by default. Enable it with the environment variable DD_PROFILING_EXPERIMENTAL_TIMELINE_ENABLED=1 or INI setting datadog.profiling.experimental_timeline_enabled=1.

### Added
- Add horizon as artisan queue command #2124 Thanks, @markwalet.
- Add network destination name to http client spans #2134
- Add automated Laravel user tracking events #2100
- Add DD_HTTP_SERVER_ROUTE_BASED_NAMING config to enforce resources #2138

### Fixed
- Fix a memory leak when overriding default arguments in install_hook (PHP7.2-) #2107
- Generate runtime-id on first request #2137
- Better GC workaround on PHP 7.3 and below for cycle collected span stacks #2123
- Use proper variable for php-config #2114
- Generate runtime-id on first request #2137

### Internal Changes
- Add note about cargo in README, make debug symbols included by default for manual compilation #2110


## Profiling
### Added
- Add timeline support #1997, #2108
- Add endpoint counts #2111
- Add file compilation times to timeline #2119

### Internal changes
- ci: add stack walking benchmark #2041, #2133, #2136
- ??build: bump indexmap to v2.0.0 #2127
- build: bump bindgen to 0.66.1 #2128


## Application Security Management (0.10.0)

#### Added
- Add automated user login events DataDog/dd-appsec-php#272
- Add sign up event DataDog/dd-appsec-php#275

#### Fixed
- Persist top-most root span from RINIT DataDog/dd-appsec-php#273

#### Internal Changes
- Rename system-test scenario DataDog/dd-appsec-php#271
- Support multiple traces and spans but provide only the root span on integration tests DataDog/dd-appsec-php#274
- Set libddwaf as git `safe.directory` on `build package` step DataDog/dd-appsec-php#276
0.88.1 ### Fixed
- Add note about cargo in README, make debug symbols included by default for manual compilation #2110
- Fix commit hashes in profiling release versions #2105
0.88.0 ### Added
- Add support for environment variable syntax to config mode in datadog-setup.php #2050

### Changed
- Use span links in the RabbitMQ Integration #2092
- Disable root span generation and removes orphans for Laravel Horizon #2091

### Fixed
- datadog-setup.php: remove return types for compatibility with PHP 5 #2059 Thanks @dserodio!
- Work around fiber->execute_data only being correct upon yielding #2072
- Skip error assignment on the root span for 5xx errors that shouldn't be reported #2089
- Ensure no crashes happen with multiple observers installed #2093
- Fix incorrect offset access in Laminas Integration #2094

### Internal Changes
- build: delete unused C components #2055
- build: bump cmake and catch2 versions #2056
- build: reduce Laravel queues' tests flakiness #2057
- testing: add snapshot testing #2058
- build: pin guzzlehttp/promises to ^1.5.3 #2071
- Update removed methods used in Guzzle V6 & V7 test suites #2073
- build: drop now-unused uuid component #2096
- Prepare instrumentation telemetry #2029, #2086, #2099
- build: Add rebuild with ASAN section to randomized tests README.md #2084

## Profiling
Allocation profiling is now enabled by default. You can manage it using the `DD_PROFILING_ALLOCATION_ENABLED` environment variable or the `datadog.profiling.allocation_enabled` setting in the INI file. Although the `DD_PROFILING_EXPERIMENTAL_ALLOCATION_ENABLED` environment variable and `datadog.profiling.experimental_allocation_enabled` INI setting still work, the new ones take precedence.

### Added
- GA allocation profiling #2038
- disable allocation profiling if JIT is enabled #2088

### Fixed
- fixed segfault in test suite #2077

### Internal changes
- move allocation profiling to its own module #2090

## Application Security Management (0.9.0)

### Fixed
- Use /proc/self/fd to avoid rlimit iteration starvation DataDog/dd-appsec-php#265

### Internal changes
- Update ruleset to 1.7.1 and libddwaf to 1.11.0 DataDog/dd-appsec-php#267
- Update fuzzer corpus DataDog/dd-appsec-php#268
0.87.2 ## Application Security Management (0.8.1)
### Fixed
- Remove max payload size on remote config calls DataDog/dd-appsec-php#256
- Improve output of phpinfo DataDog/dd-appsec-php#259
- Avoid emitting errors when blocking on RSHUTDOWN DataDog/dd-appsec-php#261
- Improve RSHUTDOWN blocking and add logging DataDog/dd-appsec-php#264
0.87.1 ### Fixed
- Fix opline being replaced by ZEND_HANDLE_EXCEPTION in uncaught finally on PHP 7 #2052
- Won't set 4xx errors on Laravel root span every time an Exception is caught #2053
0.87.0 ### Added
- Add config mode to datadog-setup.php #1951
- Add file hooking to DDTrace\install_hook #1989
- Allow DDTrace\install_hook to take any callable #1991
- Add Laminas integration #1990
- Add php-amqp integration #1996
- Add Laravel Queue integration with Span Links #2026
- Add SQLSRV Integration #2031
- Implement replacing of return values #2018

### Changed
- Allow for consuming an array via DDTrace\consume_distributed_tracing_headers #2010
- Allow DDTrace\install_hook to take any callable #1991
- Do not force cycle collection at runtime on flush by default #2046

### Fixed
- Add fixes for parametric testsuite #1988
- Fix exceptions and errors in auto_prepend_file #1987
- [Yii] Do not use module property if it doesn't exist #1999
- Load API files relative to the ComposerBootstrap.php instead of the ddtrace autoloader #2013
- Avoid side effects from errors within the sandbox #2015
- Prevent execution of install_hook() hooks after disabling tracer #2016
- Fix install_hook on functions returning by-reference #2017
- Fix #2012: Remove PHP 7-only types from signatures #2021 Thanks, @jmakuc, for reporting the issue.
- Ensure internal server errors are set on the root span in Laravel #2026
- Starting multiple traces in parallel does not confuse the limiter #2026
- Fix #2030: Segmentation fault with autoloaders bailing out #2037 Thanks, @NickStallman, for reporting the issue.
- Possible segfault when instrumenting `curl_setopt()` in PHP 7 #2039
- Fix resolving hooks within files declaring many functions on PHP 7.2 - 8.1 #2045

### Internal changes
- Increase the number of configuration entries in zai config #2020
- Reduce the allocated heap size of the elasticsearch7 container #2040

## Profiling

The profiling version number is now in sync with the tracer for stable releases.


### Changed
- Sync profiling version number with tracer #1992
- refactor: move upscaling to `libdatadog` #1984
- perf: raise sampling distance for allocations to 2048 KB #2036

### Fixed
- Fix crashes when allocation sampling occurs in certain places #2039

### Internal changes
- add test to ensure we do not crash with fibers #2003
- add stack walking test #2034

## Application Security Management (0.8.0)
### Fixed
- Amend issue when getting agent host and port DataDog/dd-appsec-php#230
- Flush socket on body limit DataDog/dd-appsec-php#233
- Set appsec disabled when ddtrace is not enabled DataDog/dd-appsec-php#245
- Cap retry to five minutes rc polling DataDog/dd-appsec-php#246
- Avoid updating waf when no updates provided on poll DataDog/dd-appsec-php#250

### Added
- Custom rules support DataDog/dd-appsec-php#235
- Engine update batcher DataDog/dd-appsec-php#248

### Changed
- Refactor capabilities DataDog/dd-appsec-php#227
- Refactor service DataDog/dd-appsec-php#229
- Update ip algorithm DataDog/dd-appsec-php#237
- Handle request-lifecycle atomically DataDog/dd-appsec-php#249
- Update-only engine listener and atomic config handling DataDog/dd-appsec-php#253

### Internal Changes
- Upgrade tracer to 0.85.0 DataDog/dd-appsec-php#226
- Setup python 3.9 for system tests DataDog/dd-appsec-php#228
- Update WAF to 1.9.0, Ruleset to 1.6.0 and Tracer to 0.86.1 DataDog/dd-appsec-php#234
- Disable apache2 restart test on ZTS DataDog/dd-appsec-php#236
- Implement abstract methods of listener on test DataDog/dd-appsec-php#239
- Add test to ensure path parser does not count on /config ending DataDog/dd-appsec-php#240
- Update ruleset to 1.7.0 DataDog/dd-appsec-php#252
- Update html blocked template DataDog/dd-appsec-php#254
- Upgrade WAF to 1.10.0 and add custom_rules capability DataDog/dd-appsec-php#255
0.86.3 ## Application Security Monitoring (0.7.2)
### Fixed
- Flush socket on body limit DataDog/dd-appsec-php#233
0.86.2 ## Tracer
- [Tracer][YII] Do not use module property if it doesn't exist #1999

## Application Security Monitoring (0.7.1)

### Fixed

- Fallback to default agent host and port DataDog/dd-appsec-php#231
- Support `DD_TRACE_AGENT_URL` DataDog/dd-appsec-php#231
0.86.1 ## Profiling (0.15.1)

### Fixed

- Fix crash by reverting "perf(profiling): speed up stack walking by using function run_time_cache" #1994. Thanks, @zeroxs for reporting.
0.86.0 ### Added
- Add MemcacheIntegration #1981
- Add PSR18 tracing support in any PSR18 ClientInterface #1938

### Fixed
- Restrict backends on DBM propagation #1983
- Allow for hooking of extended internal classes #1976

### Internal changes
- Include the circleci URL for 1.0.0-nightly installers #1977

## Profiling (0.15.0)

### Fixed
- Fix issues when preloading and non-root php-fpm user are used #1975

### Changed
- perf: speed up stack walking by using function run_time_cache #1949

### Internal changes
- Fix system ini handling of invalid values in zai config #1982

## Application Security Monitoring (v0.7.0)

### Breaking Changes
- Delete `enabled_on_cli` ini setting DataDog/dd-appsec-php#182

### Fixed
- Add uid and gid to sock and lock files DataDog/dd-appsec-php#183

### Added
- Remote configuration client DataDog/dd-appsec-php#115
- Plug remote config service DataDog/dd-appsec-php#163
- Add `config_sync` helper command DataDog/dd-appsec-php#164
- Add ASM_DATA Product Listener DataDog/dd-appsec-php#188
- IP Blocking DataDog/dd-appsec-php#188
- Redirect support DataDog/dd-appsec-php#195
- Add `request_exec` helper command DataDog/dd-appsec-php#196
- ASM_DD Product Listener DataDog/dd-appsec-php#207
- ASM Product Listener DataDog/dd-appsec-php#210
- Rule Blocking DataDog/dd-appsec-php#210
- Check if RC is available before polling DataDog/dd-appsec-php#212
- User Blocking DataDog/dd-appsec-php#213

### Internal Changes
- Support actions and refactor DataDog/dd-appsec-php#184
- Update `engine::subscriber` rule data DataDog/dd-appsec-php#186
- Blocking templates, missing traces fix and set blocking parameters DataDog/dd-appsec-php#187
- Upgrade tracer to v0.84.0 DataDog/dd-appsec-php#193
- Upgrade WAF 1.8.2 DataDog/dd-appsec-php#202
- Add init / commit stage to listeners DataDog/dd-appsec-php#208
- Ruleset 1.5.2 DataDog/dd-appsec-php#213
- Allow new and old default rules file to be loaded DataDog/dd-appsec-php#215
- Fallback to local IP on extraction DataDog/dd-appsec-php#216
0.84.0 ### Added
- Add component tag #1834
- Add W3C tracecontext propagation and propagate full 128 bit B3 headers #1856
- Implement #[DDTrace\Trace] attribute #1867
- Add 128-bit trace id generation and propagation via _dd.p.tid #1875
- Allow IP Collection, disabled by default #1895
- Add support for tracing Dispatched Events in Laravel 5.8+ #1897 (Thanks @ralphschindler)

### Changed
- Show error message when PDO returns an error #1839

### Fixed
- Make active_stack infallible: there always exists a stack #1883
- Fix DDTrace\flush() with DD_AUTOFINISH_SPANS=1 #1892
- Null the parent span of span stacks when resetting the tracer #1899

### Internal changes
- style(datadog-setup.php): reformat file #1869
- refactor(datadog-setup.php): cleanup PhpStorm warnings #1870
- Add test Wordpress 6.1 application #1884
- Revert bogus revert commit #1888
- Add apt update before fetching codecov dependencies #1893
- Fix running CI in external PRs #1898
- Add Symfony 6.2 testsuite #1900
- Add exported function to close all spans and flush #1902, #1901

## Profiling (0.13.0)

This release adds new profile types: allocation size and allocations samples. They are off by default. Enable them with the environment variable DD_PROFILING_EXPERIMENTAL_ALLOCATION_ENABLED=1 or INI setting datadog.profiling.experimental_allocation_enabled=1.

### Added
- Add allocation profiling beta #1815, #1865, #1874, #1878

### Fixed
- Do not send empty profile samples #1872, #1885

### Changed
- Bump profiling version for release #1879, #1881

### Internal changes
- docs: wall-time and cpu-time #1850
- refactor: fix clippy::too_many_arguments #1871
- tests: Add test for the fix in #1885 #1887

## Application Security Monitoring (v0.6.0)

#### Added
- Add zai config DataDog/dd-appsec-php#114
- Replace actor.ip with http.client_ip DataDog/dd-appsec-php#128
- PHP 8.2RC support DataDog/dd-appsec-php#151
- Generate IP on appsec DataDog/dd-appsec-php#155
- Support PHP 8.2 Release DataDog/dd-appsec-php#166
- Login and custom event SDK DataDog/dd-appsec-php#174
- Update SDK with separate success/failure functions DataDog/dd-appsec-php#177

### Fixed
- Return error response in helper when incoming message can't be adequately handled DataDog/dd-appsec-php#120
- Avoid creating log file as root DataDog/dd-appsec-php#124
- Reset context on shutdown DataDog/dd-appsec-php#130
- Handle errors on request_shutdown DataDog/dd-appsec-php#132
- Avoid regenerating ip when multiple headers are already present DataDog/dd-appsec-php#170

### Internal changes
- Upgrade WAF to 1.5.0 and ruleset to 1.4.0 DataDog/dd-appsec-php#117
- Update ip extraction module DataDog/dd-appsec-php#125
- Make test use latest version of ddtrace 0.79.0 DataDog/dd-appsec-php#129
- Update ddtrace-basic test to be compatible with older tracers DataDog/dd-appsec-php#142
- Fix package / release build DataDog/dd-appsec-php#152
- Update LLVM script DataDog/dd-appsec-php#153
- Fix package build DataDog/dd-appsec-php#172
- WAF upgrade to 1.6.0 and ruleset to 1.4.2 DataDog/dd-appsec-php#175
- Upgrade deprecated actions and ruleset to 1.4.3 DataDog/dd-appsec-php#176
0.83.1 ### Fixed
- Use the HttpWorker instead of the Psr7Worker for Roadrunner for more generic usage #1864
- Fix trace_id reset in DDTrace\set_distributed_tracing_context() #1863
- Work around broken enum functions run_time_cache on PHP 8.2.0 and 8.2.1 #1862
0.83.0 ### Added
- Add span.kind tagging #1801, #1843

### Changed
- Change error.msg to error.message #1821
- Change process_id to metrics tag #1826
- Remove libexecinfo on Alpine #1838
- Always interpolate error message placeholders to avoid confusion #1849

### Fixed
- Fix installer name in help output in datadog-setup.php #1829
- Fix #1828: crash when copying an immutable array #1832
- Fix CodeIgniter integration to not depend on CI_Controller class #1835
- (PHP 7) Fix memory leak with custom CURLOPT_READFUNCTION #1841
- Support custom ini names in installer #1846, #1851
- Clear the active closed stack head when resetting the tracer #1853

### Internal changes
- Speed up "Attaching workspace" step in CI #1823
- Improve test suite flakiness & randomized asan #1817

## Profiling (0.12.0)

### Added
- Add configuration to save profiles to disk #1837

### Changed
- Bump libdatadog to 1.0 #1825
- Bump profiling version for release #1848

### Internal changes
- Fix compile time warnings when compiling without features #1819
- Avoid putting .package-cache into the cache, commit Cargo.lock #1852
0.82.0 ### Added
- PHP-8.2 support #1800
- Add Elasticsearch 8 support #1808
- Add a Roadrunner integration #1813

### Changed
- Change system.pid to process_id #1796

### Fixed
- Extract priority sampling whenever is string or int #1789
- Fix crash during preloading on 8.1+ #1799
- Fix $integration->setError() to also accept \Error instances #1802
- Fix ZEND_CATCH chaining logic #1803, #1814
- Fix misbehaviour with 256+ hooks on a same function #1809
- FIX PSR-4 autoloading in ComposerBootstrap class #1816 (Thanks @ls-youssef-jlidat)
- Fix dropped spans causing an infinite loop #1818

### Internal changes
- Avoid deprecated zend_atol on PHP 8.2 #1778
- Retry docker images not starting in CI #1807

## Profiling (0.11.0)

Profiling now defaults to being enabled. This removes one step in onboarding as the environment variable DD_PROFILING_ENABLED no longer needs to be set to 1, which can be difficult in some situations. The recommended way to configure profiling is to use .ini settings, which is generally easier.

### Added
- Add .ini support #1775.
- Groundwork for allocation profiling #1794

### Changed
- Bump libdatadog to 0.9 #1782.
- Bump env_logger to 0.9.3 #1804.

### Internal Changes
- Add troubleshooting to README #1761
0.81.1 #### Fixed
- Fix span limiter not being reset in long running processes #1785
0.81.0 ### Added
- Rate limiting support #1769
- Add span stacks #1746

### Changed
- Stop collecting IP on tracer #1774
- Amend wording when uninstalling datadog #1756

### Fixed
- Guzzle Integration not initialized correctly #1762.
- Do not create root spans for certain Symfony methods #1771. Thanks, @radykal-com!
- ldconfig not found by installer #1773
- Fix crash in ddtrace_curl_multi_get_gc #1779

### Internal changes
- Fix in-tree compilation #1760
- Reusability of zai config across products #1765
- Avoid deprecated zend_atol on PHP 8.2 #1778

## Profiling (v0.10.2)

### Fixed
- Prevent deadlocks when forking #1752
- Fix linking on arm64 mac #1759

## Application Security Monitoring (v0.4.4)

#### Added
- Generate ip and duplicate ip headers on appsec DataDog/dd-appsec-php#141
0.80.0 ### Added

### Changed
- Make sampling priorities public API again #1742

### Fixed
- Fix behaviour of return false in trace hooks #1749
- Handle non-binaries in installer #1743
- Fix mishandling of payload size limit #1750

### Internal changes


## Profiling (v0.10.1)

### Fixed
- Match the service names of the tracer when unset or empty #1733
- Avoid crashing when pcntl_fork is called #1745

## Application Security Monitoring (v0.4.3)

### Fixed
- Return error response in helper when incoming message can't be unpacked DataDog/dd-appsec-php#120
- Avoid creating a log file during MINIT/MSHUTDOWN DataDog/dd-appsec-php#124
- Handle helper errors gracefully DataDog/dd-appsec-php#127
- Reset context on shutdown DataDog/dd-appsec-php#130
- Handle errors on request shutdown DataDog/dd-appsec-php#132

### Internal changes
- Enable CI on all relevant branches DataDog/dd-appsec-php#123
0.79.0 ### Added
- Integrate with Symfony console commands #1724

### Changed

### Fixed
- Fix #1709 appsec attempting to load erroneously #1711
- Fix symfony service and root span name #1723 (Thanks @numyx)
- Initialize hooks and config early to prevent conflicts with code executed in early startup #1726
- Fix hook dynamic data zeroing when new hooks are added during hook execution #1730

### Internal changes
- Fix compilation on MacOS #1716
- Deduplicate PHP 7 and PHP 8 source files #1722


## Profiling (v0.10.0)

#### Added
- Add Endpoint Profiling #1720

#### Internal changes
- Extract C API module; refactor Uuid #1710
0.78.0 ### Added
- Instrument pcntl_fork and reset tracing when it is called #1633 (Thanks @jlesueur)
- ARM64 support (Build arm images in CI) #1701

### Changed
- Accept pseudonym on via header as specified by rfc7230 #1696
- Add agent target URL to flush-message to help with debugging #1705
- Add IPv6 support to DD_AGENT_HOST #1707

### Fixed
- Fix span memory leak and packaging #1697
- Fix datadog-setup.php failing in environments without scan directory #1702
- Fix random number generator usage #1704
- Set root span name only in HttpKernel::boot() to avoid side effects on CLI #1706
- Fix meta information loss in PDOIntegration #1708

### Internal changes
- Update artifact URL for v0.77.0 gitlab deployments #1686
- Update relenv to use datadog-setup.php #1689
- Add arm support to docker images #1699

## Application Security Monitoring (v0.4.0)

#### Fixed
- Fix interned string invalidation on PHP <= 7.2 DataDog/dd-appsec-php#99
- Replace `php_error_docref` with `php_log_err` DataDog/dd-appsec-php#101

#### Changed
- Log helper communication DataDog/dd-appsec-php#97
- Set environment values at rinit on php-fpm DataDog/dd-appsec-php#105

#### Internal changes
- Update development documentation DataDog/dd-appsec-php#98
- Update system tests with new variants DataDog/dd-appsec-php#102
- Add helper test for config DataDog/dd-appsec-php#108
- Fix missing helper header coverage DataDog/dd-appsec-php#109
- Upgrade integration test tracer version to 0.76.1 DataDog/dd-appsec-php#110
- Add a way to include local changes to the cmake build process DataDog/dd-appsec-php#111
- libddwaf upgraded to 1.4.0 DataDog/dd-appsec-php#116

## Profiling (v0.9.0)

#### Added
- Add Unix Domain Socket (UDS) support #1698

#### Fixed
- Avoid PHP per-request interning #1700

#### Internal changes
- Add phpt tests for profiling #1690
0.77.0 ?? The tracer and profiling packages for PHP 7 and 8 are built on CentOS 7. These packages will not run on older GNU Linux versions like CentOS 6, Debian 7, and Ubuntu 12.04.

### Added
- Add single span ingestion mechanism #1628
- Add "recurse" => true option to hook/trace config array #1677

### Changed
- Allow Symfony EventDispatcher::dispatch hooks to recurse #1678

### Fixed
- Fix JIT compatibility under macOS #1661
- Fix -Werror=address-of-packed-member #1664
- Add support for ports on x-forwarded-for header #1675. Thanks, @estringana!

### Internal changes
- Move to CentOS 7; begin adding profiling deps #1660
- Add profiling sources #1606
- Build and package datadog-profiling in CI #1663
- Fix profiler config in randomized tests #1682

## Profiling (v0.8.0)

### Added
- Add `process_id` and `runtime_version` tags #1606.
- Add support for changing env vars per request, such as per-directory env var settings in Apache #1606.
- Add fake frame when truncating stacks #1679. This way users can tell when the stack is truncated.

### Changed
- Switch to - Raise max stack depth to 512 #1681
- Enable CPU Time profile by default #1663. This can disabled by setting the environment variable `DD_PROFILING_EXPERIMENTAL_CPU_TIME_ENABLED` to `0`, `off`, or `no`.
- Change logging format #1606. Add a new log level `trace`, which is even more verbose than `debug`.
- Stop sending a profile on every `phpinfo()` (or the equivalent command line option `--ri datadog-profiling`) #1606
0.76.2 ### Fixed
- Check for datadog-profiling in startup only instead of inside a message_handler #1670. This fixes a possible crash when all of tracer, profiler and appsec are loaded.
- Add opcode shutdown handlers, fix integrations after repeated minit #1669. This fixes a crash when using reload on apache (sending SIGUSR1).
- (PHP 7) Fix curl wrapper use after free #1662. This fixes a possible crash when curl handles are manually released within destructors inside the PHP shutdown sequence.
- Fix -Werror=address-of-packed-member (#1664).

### Internal changes
- Skip curl test if curl is not loaded #1668

## Profiling (v0.7.2)
- Fix crash with SAPI env vars DataDog/dd-prof-php#46
- Avoid .message_handler due to upstream bug DataDog/dd-prof-php#47
0.76.1 ### Fixed

- Bump PHP minimum version in PECL #1652
- PHP 7.3+ Fix compatibility with opcache #1656

### Internal changes

- %d resource ids in language tests #1657
0.76.0 ### Added
- Add B3 headers injection and extraction #1629
- Collect http.client_ip #1621

### Changed
- Filter x-datadog-tags for _dd.p. prefix and add DDTrace\add_distributed_tag #1618
- Rename query string obfuscation variable #1630
- Collect query string by default and obfuscate #1615
- Update regex to account for URL encoding #1622
- Update library versions used in tests + support plesk paths #1632
- Remove service name propagation #1635, #1636
- Add integration loaded output for deferred integrations on DD_TRACE_DEBUG=1 #1639
- Reduce memory footprint of strpprintf #1640
- New implementation for hooks #1617
- (PHP 5) Add g1a/composer-test-scenarios and symfony/flex to composer allow-plugin list #1647

### Fixed
- Fix crash with numerical value in $_SERVER array #1634
- Fix missing query string on http.url from integrations #1642

### Internal changes
- Add link to compatibility requirements in README.md #1610
- Manually build PHP for randomized tests images #1616
- Eliminate PHP 5 references from master #1626
- Remove PHP 5 from CI and fetch it instead from the latest PHP-5 branch build #1624
- Fix test_web on PHP 8.0 #1631
- Add g1a/composer-test-scenarios and symfony/flex to composer allow-plugin list #1637
- (PHP 5) Run Wordpress testsuite actually against PHP 5 #1638
- Test debian bullseye instead of stretch in CI #1644
- Update rel env to use 0.75.0 (#1620)
- Disable clang format check in CI #1619
- Add one more allow-plugins in root composer.json #1646
- (PHP 5) Add g1a/composer-test-scenarios and symfony/flex to composer allow-plugin list #1647

## Profiling (v0.7.0)
# Changed
- Do not upload empty profiles. See DataDog/dd-prof-php@e03ff23e5216f863061285e13170d011d0c04bc8 for details.

# Fixed
- Fix a small memory leak with env var handling.

# Added
- Add SAPI as profile tag.
- Add support for `DD_PROFILING_EXPERIMENTAL_CPU_TIME_ENABLED` env var. It previously supported this functionality under a different, undocumented name.
0.75.0 ## Tracer
### Added
- Add a new decision maker mechanism #1598
- Rename DD_TRACE_X_DATADOG_TAGS_PROPAGATE_SERVICE to DD_TRACE_PROPAGATE_SERVICE #1612, #1613
- Add support for unix domain sockets #1601
- Add RedisCluster split by host #1602 (Thanks to @radykal-com)
- Add http.useragent to root span #1607

### Fixed
- Fix #1582: *_id keys in meta and metrics are wrongly encoded #1599
- Fix dlerror logging format #1605
- Fix DD_TRACE_URL_AS_RESOURCE_NAMES_ENABLED accidentally guarding http.method and http.url as well #1608

### Internal changes
- Fix downstream job trigger for deployments to rel-env #1597
- Update dd-trace-php link for reliability environment #1595
- Move request-replayer from our internal deprecated repository to dd-trace-php #1600
- Support restricting PHP versions while running randomized tests #1604
- Transition to non-legacy circleci images #1609
0.74.0 ## Tracer
### Added
- Add configurations for retaining select query string parameters in resources and http.url #1566

### Changed
- Respect autofinish on flush(), add warnings in debug mode when having unbalanced spans #1564, #1569
- Loose restrictions around distributed tracing context setting #1571

### Fixed
- Fix dispatch resetting #1570
- Fix run_time_cache initialization for closure calls with foreign scope on PHP 7.4-8.1 #1578
- Eliminate the separate span id stack, fix distributed tracing trace_id #1586
- Fix handling of INI and ENV changes post minit, pre runtime #1593
- Fix inconsistent module load and unload sequence #1585
- Fix installer setting check for extensions #1584

### Internal changes
- Pin composer on PHP 7 docker containers to version 2.2 #1565
- Disable flaky test on PHP 5.4 #1583
- Remove Symfony 4.2 from PHP 7.4 web tests #1587
- Add the scenario name to the randomized test docker name #1590
- Fix ownership of files within release artifact tars #1591

## Profiling (v0.6.1)
### Fixed
- Bump profiling to v0.6.1 #1588. This re-initializes static variables on startup/minit which may help prevent Apache reload from crashing.
- Enable profiling installation on PHP 8.1 #1576

## Application Security Monitoring (v0.3.2)
### Fixed
- Fix hybrid extension initialisation [#92](https://github.com/DataDog/dd-appsec-php/pull/92)
0.73.0 ## Application Security Monitoring
### v0.3.1
#### Fixes
- Fix relative module order with ddtrace on PHP 7.3 issue [#88](https://github.com/DataDog/dd-appsec-php/issues/88) - [#86](https://github.com/DataDog/dd-appsec-php/pull/86)

### v0.3.0
#### Breaking Changes
- Rename ini settings from `datadog.appsec.rules_path` to `datadog.appsec.rules` [#74](https://github.com/DataDog/dd-appsec-php/pull/74)
- Interpret `datadog.appsec.waf_timeout` as microseconds rather than milliseconds [#74](https://github.com/DataDog/dd-appsec-php/pull/74)

### Fixes
- Add obfuscator strings when initialising WAF from client settings [#83](https://github.com/DataDog/dd-appsec-php/pull/83)

#### Additions
- Add WAF metrics and errors to traces [#79](https://github.com/DataDog/dd-appsec-php/pull/79)
- Actor IP resolution from request headers [#80](https://github.com/DataDog/dd-appsec-php/pull/80)
- Add support for WAF event obfuscator [#82](https://github.com/DataDog/dd-appsec-php/pull/82)
- Add obfuscator regex for values [#84](https://github.com/DataDog/dd-appsec-php/pull/84)

#### Miscellaneous Changes
- Update installer links in documentation and tests [#76](https://github.com/DataDog/dd-appsec-php/pull/76)
- Add `parameter_view` for non-ownership of WAF parameters [#78](https://github.com/DataDog/dd-appsec-php/pull/78)
- Accept IP list on `X-Cluster-Client-IP` header [#81](https://github.com/DataDog/dd-appsec-php/pull/81)
- Update ruleset to v1.3.1 [#82](https://github.com/DataDog/dd-appsec-php/pull/82)
- libddwaf upgraded to v1.3.0 [#82](https://github.com/DataDog/dd-appsec-php/pull/82)
- Update installation instructions [#84](https://github.com/DataDog/dd-appsec-php/pull/84)
0.72.0 ### Added
- Add support for memcached on PHP 8 #1558

### Fixed
- Fix #1544: Handle hook dummy span hack when assigning parent #1557

### Internal changes
- Add gdbinit files for php 8.0 and 8.1 #1556
- Add system tests in CI #1552
- Use latest 8.0.17 in buster images #1559
- Update flex to v1.18.5 in composer.lock files for Symfony 4.0 and 5.0 #1560
- Add a single test to xfail after upgrade of docker image to 8.0.18 #1561
- Update link to download 0.71.1 in the reliability environment #1555
0.71.1 ### Fixed

- Use -1 as uninitialized op_array_extension marker #1550

### Internal changes

- Use latest ubuntu images in CI #1543
- Use 8.1.4 in development buster images #1553
- Add randomized tests for PHP 8.1 and make buster containers arm64 ready #1551
- Remove regressions from randomized tests #1547
0.71.0 ### Changed
- Do not disable tracing when ionCube loader is detected #1520

### Added
- Added ES integration support for newer PHP and ES versions #1516
- Add support for wordpress on PHP 8 and use a different hook #1522
- Add Code Hotspots #1517
- Implement split by instance in PDO #1498

### Fixed
- Trigger profiling interrupt function before internal observer_end #1499
- Fix compatibility with PHP 8.2 (master) #1521

### Internal changes
- Clean up Tea SAPI and allow ddtrace to run there #1502
- Use a new curl session for each writer iteration and clear it after #1504
- Increase bgs backlog by 20% #1506
- Always include the Tea SAPI Catch2 test header #1507
- Add is_nil function to UUID component #1515
- Fix randomized testsuite memory limits and background sender curl handling #1525
- Run cmake-format on TEA's CMakeLists.txt #1527
- Simplify calls (zai symbols), add support for generators #1529
- Update profiling to v0.5.0 #1537
- Update profiling to v0.5.1 #1541
- Move from checking status code reported by vegeta to check error logs #1540
- Fix ZAI symbols on PHP 7.3+ (randomized tests failures) #1536
- ??Add a test case for guzzle url no schema + split by domain #1534
- Point rel-env deployment to GH release 0.70.1 #1531
- Tea ZE Suppport #1526
- Show curl response status code in tests #1524
- Add long running script memory check to randomized tests #1356
- Add a test for sub path and wildcards normalization #1505
0.70.1 ### Changed
- Disable x-datadog-tags header propagation #1528
### Fixed
- Fix Laravel exceptions being over-reported #1361
- Fix too aggressive symbol exporting #1523
- Hide the dummy span during trace hooks away #1519
- (PHP 5) Remove empty multi_curl handles hashtables #1513
- Do not mess with the span duration in curl integration #1512
- Fix #1510 post-install not detecting required extension #1511
- ??Explicitly depend on ext/standard and fix in-tree builds #1509
0.70.0 ### Changed
- Make the legacy API a pure proxy to internal spans #1471
- Load the legacy tracer only when actually used #1449
- Update profiling to v0.4.0 #1495

### Added
- Add appsec library to the release bundle #1469
- Add appsec installation #1470

### Fixed
- Always emit NoopSpans if the tracer extension is disabled #1475
- fix dd_update_upstream_services on php5 #1476
- Setup: Error if profiling is given but unavailable #1477
- Ensure dropped spans are distinguishable from unfinished spans #1480
- Fix Span::setError docblock #1481
- Fix invalid reads in background sender #1483
- Restore support for manual distributed tracing #1484
- Remove version number from datadog-setup.php's help output #1487
- Improve error detection for datadog-setup.php #1489

### Internal changes
- Add parallelism to makefile for builds and test runs #1382
- Add profiling module to randomized tests #1412
- Run randomized internal API stress testing in CI #1445
- Switch to Symbols interface, cleanup tests #1465
- Improve Symbol Call interface, introduce closure support #1467
- Support in-tree builds of Tea #1472
- Sandbox Bailout #1473
- Patch zend_alloc.c to not crash in CI for PHP 7.0 to 7.2 #1478
- build tea once during development #1479
- Update PHP 8.1 dependencies, include laravel testing #1482
- Inline queue function pointers #1490
- Adjust stack sample max stack depth #1491
- Remove unused profiling components #1492
0.69.0 ### Breaking changes
- Query string is now not included in `http.url` in Nette integration and in generic web frameworks tracing.

### Added
- Implement x-datadog-tag propagation and _dd.p.upstream_services #1405

### Changed
- Get rid of ini-ignoring and redundant checking of ddtrace being enabled #1448
- Strip query string from http.url in generic web tracing #1454
- Use internal root spans in Integrations in place of using the legacy API #1383
- Hard-code version in installer, remove --url option, rename it #1463
- Remove generator support on PHP 7 #1464

### Fixed
- Ensure a proper sampling decision is also evaluated when distributed tracing is used #1450
- Fix ObjectKVStore compatibility with throwing autoloaders #1451
- Properly report error for artisan command in Laravel 7+ #1456 (thank you @ls-paul-julien-vauthier)

### Internal changes
- Migrate ZAI tests to use ZAI SAPI harness #1457
- Move ZAI SAPI to root directory #1411 #1443
- ZAI methods on PHP 5: Args and retval #1401
- Implement ZAI Value interface #1453
- Implement ZAI SAPI test harness (catch2) #1455
- Implement ZAI SAPI test fixture (catch2) #1458
- Refactor ZAI SAPI into Tea SAPI, brings various improvements #1462
- Implement ZAI Symbols interface #1452
- Address Sanitizer check for ZAI SAPI - 1459
- Fix ZaiSapi_ROOT path in Makefile #1443
0.68.2 ### Changed
- Clean up generate-final-artifact.sh #1442

### Fixed
- Replace direct access of meta/metrics zvals by safe array access in most places #1440
- Always separate meta and metrics arrays on access #1441
- Bump profiling to v0.3.0-rc.6 (fixes some linking bugs) #1444
0.68.1 ### Fixed
- Do not diagnostics when ddtrace is disabled #1434
- Fix json symbol address resolving logic #1432
- Disable tracing when PHP is executed during RINIT #1429
- Change Predis integration type to "redis" #1427
0.68.0 ### Added
- Bring priority sampling to internal #1366
- SpanData::$parent property #1369
- Add queue and channel components #1388
- Add log component #1390
- Add arena component #1391
- Add stack sample component #1392
- Add uuid component #1393
- Add time component #1394, #1408
- Add profiler installation #1422
- Zai/json #1378, #1397
- Add Code Coverage #1389

### Changed
- (PHP 8) Migrate ObjectKVStore to WeakMap internally #1362
- Adjust components #1387
- Export only specific symbols #1407
- Sanitize user information from urls #1396
- Split INI setting in installer so they can be added separately when missing #1415
- Use the new targz bundle format with the new PHP installer #1421
- Have both legacy and new installer to fail when json PHP extension is not enabled #1410

### Fixed
- Fix Laravel unnamed route with caching and domain specification #1364
- Fix http.url of internal root span #1360
- Add small framework to stress test our internal API with bogus inputs #1365
- PDOIntegration::parseDSN fails to parse some DSN #1373
- Fix constructor of OpenTracing wrapper when no Datadog tracer is provided #1406 - thanks @OGKevin for the reproduction case
- Fix parsing of urls without schema into host name #1385
0.67.0 ### Added
- (PHP 5) Add zai config, internal spans, and exception handling (#1339)
- (PHP 7, 8) Add mongodb instrumentation (#1345)
- PHP installation script (beta) (#1335)

### Changed
- (PHP 5, 7) Move _dd.origin handling to internal #1347

### Fixed
- (PHP 7, 8) Fix exception handling with opcache cfg optimization enabled (#1344)
- (PHP 7, 8) Fix memory leaks in curl and error handling (#1350)
- Use ObjectKVStore in place of internal registry to store PDO connection parameters (#1355)
0.66.0 ### Breaking changes
* Global tags are now assigned early. This means that users have to make sure to not overwrite `meta`, but only add to it instead, if they don't want to lose global tags. Wrong: `$span->meta = [ 'some' => 'tag' ]`. Correct `$span->meta['some'] = 'tag'`.
* Support for legacy param `DD_TRACE_RESOURCE_URI_MAPPING` has been dropped with the migration to C code, after more than a year of deprecation. Use `DD_TRACE_RESOURCE_URI_FRAGMENT_REGEX`, `DD_TRACE_RESOURCE_URI_MAPPING_INCOMING`, and `DD_TRACE_RESOURCE_URI_MAPPING_OUTGOING ` instead. See [resource mapping](https://docs.datadoghq.com/tracing/setup_overview/setup/php/?tab=containers#map-resource-names-to-normalized-uri) for more details.

### Added

- (PHP 8) Migrate _dd.origin and distributed header sending to internal (#1267)
- (PHP 5) Add headers ZAI implementation (#1308)
- Add support for PHP 8.1 (#1297)

### Changed
- (PHP 7, 8) Internal (root) span initialization (#1329)

### Fixed

- (PHP 5, 7, 8) Remove all lines containing zai_sapi from config.m4 (#1333)
- (PHP 7, 8) Fix unnamed service spans caused by improper handling of `DD_TRACE_ENABLED` (#1332)
0.65.1 ### Fixed
- Prevent flushing traces of requests without actual PHP code #1327
0.65.0 **WARNING**: Resource names for ?Lumen? applications will change by default to `GET /actual/uri/path` from the previous format `GET action_name` or `GET App\Controller@action_method`. You might need to adjust your monitors and filters for the change. In order to go back to the previous behavior, instead, you can temporarily set `DD_TRACE_URL_AS_RESOURCE_NAMES_ENABLED=false`

### Added
- Add functions ZAI support for PHP 5 and 7 #1300
- Add properties and exceptions ZAI implementations for PHP 5 #1306
- Enhance exception reporting on Laravel 5+ #1322

### Changed
- Remove src/dd-doctor.php #1316
- Honor DD_TRACE_URL_AS_RESOURCE_NAMES_ENABLED in Lumen resource naming #1318

### Fixed
- Fix CLI processes emitting empty root spans when CLI tracing is not enabled #1320
0.64.1 **WARNING**: Users doing manual instrumentation using the `GlobalTracer::get()->startActiveSpan()` api should update to this version from 0.63.0 and 0.64.0.

### Fixed
- Fix span start times of userland spans (#1312)
0.64.0 **WARNING**: With this release the file `_generated.php` is not used anymore and files `_generated_api.php` and `_generated_internal.php` are generated instead. This only impacts users having a very custom installation procedure that requires custom builds and manual copy of files.

### Added
- Bring ZAI config, internal spans, and improved exception handling to PHP 7 #1293

### Fixed
- Disable flaky ext/ftp tests on PHP <8.1 #1296
- Compatibility with PHP 7.4+ preloading #1298 (thank you @olsavmic for the investigation and reproduction case)
- Check for php8 binary in package/post-install.sh script #1301 (thank you for the contribution @daiwai)
- Support userland spans with custom root spans created internally #1303
- Fix memory leak of already defined global tags #1304
0.63.0 ### Added

- ZAI config (#1260)
- Use exceptions ZAI for PHP 7 as well (#1283)

### Fixed

- Fix arginfo of error & exception handler (#1291)
0.62.1 ### Fixed
- Add linux/securebits.h to CentOS docker container, to have it present in linux build artifacts #1286
- Handle an additional case of capabilities being dropped within our background sender #1287
0.62.0 ### Added
- ZAI env #1250
- Add ZAI component for reading headers #1256
- (PHP 8) Add proper exception and error reporting #1272
- (PHP 8) Register SpanData->exception property and store exception info there instead of internally #1281
### Changed
- Refactor internal span objects to be allocated together with their internal data #1254
- Enforce metrics to be floats in internal serializer #1258
- Allow for global debug mode, add zai testing to Makefile and more minor testing improvements #1265
- Move DDTrace\Format to src/api #1271
- Moving spans from userland to extension #1262
### Fixed
- Fix msgpack serialization of empty arrays #1259
- Set SECBIT_NO_SETUID_FIXUP to prevent crashes after setuid() calls #1276
- Apply original curl headers when curl_setopt_array() fails #1279
- Fix owner of files included in the distributed .tar.gz archive #1280
- Fix tests: Pin Symfony 4 tests to laminas/laminas-code < 4.4 #1266
0.61.0 ### Added
- Add \DDTrace\get_current_context #1227
- Create property ZAI seam for PHP 8 #1246
- Create exceptions ZAI seam for PHP 8 #1248
- Run mongodb-driver testsuite in CI with and without the tracer #1255
### Changed
- Move mapping-settings to be deserialized as a zend_array * #1253
### Fixed
- Remove TSRMLS_C from \DDTrace\current_context #1249
0.60.0 **Breaking change**: Users that are not explicitly setting or using json encoding are not impacted but this breaking change. Users either requiring json encoding for special purposes to send traces to their own custom targets or relying on the Stream class (that was not part of the public api in src/api) will have to manually clone the classes from the previous release SHA and register themselves. This is discouraged because as of today, json causes a fallback to blocking sync transmission to the Datadog agent, while using messagepack we support the unblocking async transport to our agent.

### Added
- Zend Abstract Interface: Method call seam (PHP 5) #1186
- ZAI Sandbox #1213
- Auto-flushing (PHP 5) #1189
- Nette integration (v2 and v3) #504 #1220 (thanks @kozaktomas for the original contribution and thanks @Anilm3 for reviving the original PR)
- Begin documenting architecture #1225
- Detect ZAI ZMM leaks #1229
- ZAI function-call seam (PHP 8) #1234
### Changed
- Update Docker ci docs #1202
- Remove Json encoder and Stream transport #1235
- Move from uint63 to uint64 for trace_id span_id and parent_id #1237
- Remove redundant dd_trace_tracer_is_limited() calls #1239
- Change config.m4 to allow in-tree build #1238
- Eliminate "innerhook" from trace_method and trace_function #1240
- Remove TSRMLS_* macros from PHP 7 and PHP 8 #1241
- Deferred loading with ZAI function-call seam (PHP 8) #1243
- Speed up randomized testing using a post #1192 version #1245
- Self update composer in the image we use to prepare the code in CI (#1221)
### Fixed
- Fix meta header name for language version in BGS agent request #1244
- Fix flaky PCNTL tests (#1232)
0.59.0 ### Added
- [ZAI SAPI] Zai\trigger_error() SAPI function #1212
- Autocomplete Makefile target names in buster dev images #1224

### Changed
- Use new buster containers in CI #1210
- remove _tmp suffix from development buster images #1217
- Tidy the components/ #1216
- Tidy up the docker-compose file a bit #1223

### Fixed
- Disable PCNTL in forked processes #1196
- Updated contributing and fixed typo on Makefile::test_all #1218
- Fix ingestion control reporting #1222
- Skip tests that have development environment dependencies #1215 (thanks for the report @remicollet)
- Always resolve curl class entry symbols at runtime (PHP 8) #1209 (thanks for the report @metaxy)
0.58.0 ### Added
- ZAI SAPI #1204
- [ZAI SAPI] Add test helpers #1208
- Add a Kubernetes example to container tagging tests #1206
- Add Buster containers for PHP 5.4 through 7.4 #1201
### Changed
- Remove PHP version prefix from buster development containers #1203
### Fixed
- handle laravel 7+ generated:: prefix for unnamed routes #1198
0.56.0 ### Added
- Add randomized testing to test hundreds of different scenarios #1131
- Add configured http headers to root span #1154
- Add the possibility to freeze a regression in a specific randomized tests scenario #1153
### Changed
- Remove non php7 code from ext/php7 folder #1162
- Remove non php5 code from ext/php5 folder #1164
### Fixed
- Add missing dependency on curl extension for PHP 8 #1144 (Thanks @remicollet!)
- Fix initialization of `curl_multi_init()` for distributed tracing #1159
- Add comment to long running example for method instead of function #1149
- Fix linting + xfail a flaky test #1147
- Update links in README.md to configuration and OT docs #1069
- Fix clang-format installation after circleci image update to buster #1141
0.55.0 ### Added
- Slim 4 integration #1136
- Add support for redis cluster #1137
0.54.0 ### Added
- Support distributed tracing for calls to curl_multi_exec() #1119
### Changed
- Refactor PHP 7 curl distributed tracing #1123
- Real package verification on nginx, cli, apache #1129
0.53.0 ### Added
- Add function to correctly extract trace id in all contexts #1125
### Fixed
- Attach fatal errors to userland root span on PHP 5.6 + PHP 5.5 #1109
- Rebuild CentOS 6 containers #1116
- NullLogger is essential, not optional #1113
- Make Uri to resource name normalization case insensitive #1120
- Avoid empty resource names in Yii in case of root `/` paths #1122
- Fix multiple deferred integration loading on PHP from 7.0 to 7.2 #1121
- Fix error in case of x-datadog-origin header in distributed tracing on PHP 7.0-7.2 #1124
0.52.0 ### Added
- Laravel 8 support #1100 #1102
- Enable Yii 2 on PHP 8 #1106
- Add PHP 8 asan tests #1108

### Changed
- Use the observer API on PHP 8 #1089
- Remove integrations that do not yet support PHP 8 #1103
- Update containers to PHP 8.0.0 #1111

### Fixed
- Fix distributed tracing on PHP 8 #1099
0.51.0 ### Added
- Support service split by host in PHPRedis integration #1084
- Support service split by host in Predis integration #1094
- Load WordPress 5 integration on PHP 5 #1086
- Custom pre-RC5 build #1093
- Second custom pre-RC5 build #1096


### Changed
- Consolidate 3rd party code into vendor directory #1082
- Separate extension code by PHP major version #1085
- Make include paths relative to ext/ #1087
- Copy PHP 7 extension code to php8 directory #1088
- Upgrade to composer 2 #1075
- Fix composer self-update on master properly handling cached directories #1092
- Make execution of ext tests locally faster and easier #1091
0.50.0 ### Added
- Experimental support for PHP 8.0.0 RC 2 & RC 3 (Provided for testing only and not intended for use on production) #1039 #1053 #1054 #1076
- Trace Symfony controller and more #1048
- Add example for long running processes #1049
- Add tests and support for WordPress 5 on PHP 7 #1058 #1059 #1081
- Add tests for Symfony 5 #1060 #1062

### Changed
- Build alpine packages on alpine and add e2e package verification #774
- Add fatal error info to `DDTrace\Tracer` made root spans on PHP 7 #1040
0.49.0 ### Added
- Add .gdbinit files from released PHP versions #996
- Support PHP 5.5 #1008, #1018, #1020, #1030, #1032
- Add PHP 5.4 support to PECL package #1019
- Add Levi and Luca as lead developers to package.xml #1025
- Close open spans on fatal errors #1028
- Attach fatal errors to all open internal spans #1034
- Experimental PHP 8.0.0 RC 1 support (Provided for testing only and not intended for use on production) #1027 #1036 #1041

### Changed
- Enable the background sender by default on PHP 5.4 #991
- Remove userland references to sandboxing #1003
- Sandbox flush in limited mode on PHP 5.4 #1009
- Defer loading of PDO, Memcached, Slim, WordPress, and Yii integrations until first usage #1006
- Clear separation in testing of src/api vs src/DDTrace #1017
- Harden curl integration #1024
- Compile src/DDTrace/version.php into _generated.php to avoid loading it at runtime #1026
- Disable instrumenting generators on PHP 5 #1050

### Fixed
- Fix pecl-build for real releases #998
- Properly group traces sent in batch during long running scripts #1029
- Add back support for trace analytics to curl integration #1031
0.48.3 ### Fixed
- Fix sigsegv in deferred loading #1022
0.48.2 ### Changed
- Update excluded modules #1011
- Deprecate dd-doctor.php #1014

### Fixed
- PHP 5.4 build in ZTS mode #1011
- Call ddtrace_engine_hooks_{rinit,rshutdown} #1013
0.48.1 ### Fixed
- Symfony HttpException with status less than 500 should not be considered an error #995, #1002 (thanks, @franek!)
- Block Zend signals from background sender thread #1000
- Fix out-of-sync issue if span stack is closed while a closure is running #1001
0.48.0 ## Important!
The legacy API for custom instrumentation `dd_trace()` is now a no-op in this release. See the [upgrade guide](https://docs.datadoghq.com/tracing/custom_instrumentation/php/?tab=tracingfunctioncalls#legacy-api-upgrade-guide) for instructions on upgrading.

The way PHP 5.4 and 5.6 hook into the engine has changed. Please read [deep call stacks on PHP 5](https://docs.datadoghq.com/tracing/troubleshooting/php_5_deep_call_stacks/) for more information on potential issues.

All calls to `DDTrace\trace_function` or `DDTrace\trace_method` functions need to happen before the first invocation of the target e.g. `DDTrace\trace_function('foo', ...)` should be done before `foo` is called for the first time. In the future this may need to be done before the target is even defined. This was previously noted in 0.45.0, but is now enforced for all PHP versions.


### Added

- Deferred initialization of integrations, and matching integration to a callable at compile time #891 #972
- Test for non-zero durations #950
- Add support for PHPRedis 3 extension on PHP 7 #948
- Add support for PHPRedis 4 extension on PHP 7 #982
- Add support for PHPRedis 5 extension on PHP 7 #983
- Add non-tracing API (hook_function/hook_method) #984

### Changed

- Improve CGI usage in test suite #952 (thank you @remicollet!)
- Remove `ddtrace.strict_mode` INI setting #955
- Sandbox PHP 5.6 using `zend_execute_ex` + `zend_execute_internal` #970
- Package `_generated.php` with PECL #980
- Move startup logs behind debug mode #986
- Split PHP 7's opcode handlers for previous case #987
- Sandbox PHP 5.4, cache negative lookups on PHP 5, and delete integrations using dd_trace #988
- Cleanup PHP 7 curl handlers #989
- Update dd_trace warning for being a no-op #990
- Defer loading of PHPRedis #992
- Defer loading of Predis #994

### Fixed

- Compatibility issues with PECL #845 (thank you @remicollet!)
- Fix package.xml validation for PECL #954
- Removed obsolete pre-integrations loading check from dd-doctor.php #956
- Fix off-by-one error with longest config name for integrations #985
0.47.1 **Deprecation notice**: The following environment variable names have changed. The old names are deprecated. See #969 for more details.

| Old Name | New Name |
| ---------------------------------------------- | ---------------------------------------------------- |
| `DD__ANALYTICS_ENABLED` | `DD_TRACE__ANALYTICS_ENABLED` |
| `DD__ANALYTICS_SAMPLE_RATE` | `DD_TRACE__ANALYTICS_SAMPLE_RATE` |
| `DD_INTEGRATIONS_DISABLED` | `DD_TRACE__ENABLED` |

### Added

- Add `DD_TRACE_AGENT_URL` environment support #926 (thank you @nurcahyo!) #962
- Support for `DD_TRACE__` env vars #969
- Deeper instrumentation of Symfony 4.4 #967

### Fixed

- Move startup logging to first RINIT #961
- Fix propagation of `DD_ENV` and `DD_VERSION` to children spans #963
- Remove query string when new resource mapper is used #973
0.47.0 **Deprecation notice**:
- Setting service name via `DD_SERVICE_NAME` is now deprecated and will be removed in a future release. Use `DD_SERVICE` instead for consistency with other Datadog tracers and services.
- Setting global tags via `DD_TRACE_GLOBAL_TAGS` is now deprecated and will be removed in a future release. Use `DD_TAGS` instead (with the same format) for consistency with other Datadog tracers and services.
- `DD_TRACE_RESOURCE_URI_MAPPING` is deprecated now that it has been split into `DD_TRACE_RESOURCE_URI_MAPPING_INCOMING` and `DD_TRACE_RESOURCE_URI_MAPPING_OUTGOING`.
- The functions `dd_trace` and `dd_trace_forward_call` are deprecated and will be made a no-op in the next release. See #924 for how to migrate.

### Added

- Apply new uri to resource normalization rules #928
- Add DDTrace namespace for internal functions #930
- Startup logging (can be disabled by setting `DD_TRACE_STARTUP_LOGS=0`) #935

### Changed

- Sandboxed cURL (PHP 5) #911, #938
- Sandbox Lumen (PHP 5) #945
- Sandboxed Symfony (PHP 5) #946
- Add support for service name configuration via DD_SERVICE #919
- Add support for DD_TAGS, fallback to DD_TRACE_GLOBAL_TAGS #920
- Add support for DD_VERSION and DD_ENV variables #803 - thanks @brettlangdon
- Enable OpenTracing test suite in CI #921
- Defaults for name and resource on SpanData #923
- Refactor dispatch.{c,h} #932
- Extract ddtrace_sandbox_begin/ddtrace_sandbox_end helpers #940
- Warn on dd_trace usage if DD_TRACE_WARN_LEGACY_DD_TRACE #941

### Fixed

- Only build on 64-bit platforms #929 (thanks for the report @remicollet)
- (PHP 5.4) Make compilation to single file compatible with `include __DIR__ . '...'` in files #943
0.46.0 ## Important behavior changes in this release
If you use the OpenTracing API, the OpenTracing compatible tracer will no longer be returned from `OpenTracing\GlobalTracer::get` automatically. See #899 or [the documentation](https://docs.datadoghq.com/tracing/opentracing/php/) for more details.

On PHP 7, `dd_trace` will no longer work on internal functions e.g. `curl_exec`; use `dd_trace_method` or `dd_trace_function` instead. Additionally, when targeting internal functions they also need to be added to the environment variable `DD_TRACE_TRACED_INTERNAL_FUNCTIONS` which is a comma separated list e.g. `DD_TRACE_TRACED_INTERNAL_FUNCTIONS=array_sum,mt_rand,DateTime::add`. These two changes enable a significant performance optimization.

### Changed
- Avoid usage of spl_autoload_register while still allowing noop manual instrumentation without ext installed #877
- Sandbox Slim integration #878
- Sandbox Lumen integration #884
- Sandbox CakePHP integration #898
- Remove legacy hook for OpenTracing #899
- Noop the legacy API when a potentially conflicting module detected #900, #905
- Move the request init hook to `auto_prepend_file` #907
- Optimize internal functions handlers at startup (PHP 7) #895

### Fixed
- Fix early return in dd-doctor #894 (thank @tatsuo48!)
- Fix opcache check in dd-doctor #896 - thanks @tatsuo48
- Update CONTRIBUTING.md #897 - thanks @askkaz
0.45.1 ### Fixed

- Fix uncaught exceptions with auto flushing enabled #882
- Prevent curl and guzzle from inheriting top level app name #885
- Change PDO service name to lowercase #886
0.45.0 ## Important behavior changes in this release
If you are using `dd_trace`, `dd_trace_function`, or `dd_trace_method` then you need to call these functions before the first invocation of the target e.g. `dd_trace('foo', ...)` should be done before `foo` is called for the first time.

### Changed

- Compile to one single file #840, #874
- Simplify configuration #833, #870
- Refactor module blacklist #852
- Cache that a function is not traced #854, #863
- Simplify spl_autoload_register instrumentation #867
- Use normalized URL as the resource name for curl #869 (thanks, @akdh!)
- Sandbox header and http_response_code #875

### Fixed

- Fix variadic args with empty function signature #872
- Bump phpstan to 0.12 and fix issues #841
0.44.1 ### Fixed

- Revert "Merge pull request #815 from DataDog/levi/ddtrace_moment" #859
This fixes issue #855.
0.44.0 ### Fixed

- Fix ddtrace_config_* functions to use sapi_getenv #848
- Fix curl integrations #851

### Changed

- Whitelist the `cgi-fcgi` SAPI #835
- Add ddtrace_hash_find_ptr_lc which stack-allocates small strings #839
0.43.0 **Note: This release comes with minor behavior changes for tracing closures on PHP 7. Please see [the PR for details](https://github.com/DataDog/dd-trace-php/pull/762).**

### Added

- Service mapping with `DD_SERVICE_MAPPING=pdo:payments-db,mysqli:orders-db` #801, #817
- Auto flushing with `DD_TRACE_AUTO_FLUSH_ENABLED=1` (PHP 7) #819, #826
- Disable automatic root-span creation with `DD_TRACE_GENERATE_ROOT_SPAN=0` #834

### Changed

- Always return unaltered VM dispatch (PHP 7) #762
- Uri to resource name ON by default #798
- Sandbox Guzzle #809, #816
- Sandbox predis integration #813
- Sandbox curl (PHP 7) #814, #817, #831
- Convert pid from long to string for internal spans #825
- Move some Configuration methods to functions written at the C level #829
0.42.0 ### Added

- Close open sandboxed spans on exit (PHP 5) #780
- Prehook feature to run tracing closures before the original call #784

### Changed

- Enable background sender (BGS) by default #796, #800
- Improves alpine extensions build/verify process #774
- Refactor Symfony integration #786
- Let curl calculate Content-Length header value when sending requests to the agent #804

### Fixed

- Pass return value as null to tracing closure when value IS_UNDEF #791 (thanks for the report @wajdisawaf!)
- Set a sane memory limit when running php from inside post-install hook #792
0.41.1 ### Fixed
- Fix pecl installs #781
- Fix background sender logging for ZTS #783
0.41.0 ### Added
- Put compile_file hook behind a feature flag, default on #757

### Changed
- Require curl at configuration time #766
- Log background sender messages to error_log #776
- Deprecate manual usage of legacy Symfony bundles and Laravel provider #772
- Separate background sender timeout env vars from userland #773

### Fixed
- Gracefully handle a dropped span on exit #765
- Update contribution guidelines #769
- Trace http response code when set via function 'http_response_code' #755 - thanks @aderiyenko
- Fix execinfo on builds from source in Alpine containers #752
0.40.0 ### Added
- Background sender debug info in dd-doctor #758

### Changed
- Run neighboring extension's opcode handlers before instrumenting #754

### Fixed
- Circuit breaker should not prevent background sender #760
0.39.0 ### Changed:
- Bring background sender to feature parity #738
0.38.1 ### Fixed
- MessagePack serialization with a reference #730
0.38.0 ### Added
- Official support for PHP 7.4 #723
- Tools to measure memory overhead #718

### Changed
- Move Laravel to sanboxed api #700
- Remove the sandbox API for PHP 5.4 #719
- Dual-licensed under Apache 2.0 or BSD3 #727

### Fixed
- README reference to RELEASING.md was removed #720 (thanks @v1v!)
- MessagePack serialization with a reference #730
0.37.0 ### Added
- Target a specific PHP version during install by setting `DD_TRACE_PHP_BIN` #604
- Curl Integration: Add all available information from `curl_getinfo()` as span tags #642

### Changed
- Move dogstatsd client init to rinit #703

### Fixed
- Issues related to limited tracing #689
- Backup and restore last error (related to `error_get_last()` issue) #694
- Handle out-of-sync spans #702
- Sandbox tracer flushing #707
- Enhance OpenTracing StartSpanOptions support #708
- Ensure errors raised in request init hook do not affect `error_get_last()` #709
0.36.0 **Note** environment variable `DD_SAMPLING_RATE` as been deprecated. Use `DD_TRACE_SAMPLE_RATE` instead.

### Added

- Close open sandboxed spans on exit on PHP 7 #679
- Support for tracing without limits #686
- Add extra info to curl errors #688

### Changed

- Enable Sandboxed Symfony Integration #682
- Migrate Mongo library integration to sandboxed api #669
- Rename env DD_SAMPLING_RATE to DD_TRACE_SAMPLE_RATE #687
0.35.0 ### Added

- Compile-time metric #648
- Health metrics: track segmentation faults #621

### Changed

- Migrate Mysqli integration to sandboxed api #635
- Migrate Zend framework integration to sandboxed api #655
- Migrate Symfony framework integration to sandboxed api #667
- Migrate Mongo library integration to sandboxed api #669
- Refactor opcode hooks #659

### Fixed

- CodeIgniter namespace definition #650
- Error reporting in case of fatal errors #671
- Mutation of Memcached result code #663
0.34.1 ### Fixed

- PHP notice of undefined indexes `REQUEST_METHOD` and `REQUEST_URI` when running the request init hook on unsupported SAPI's #637
- Distributed trace ID handling #645
0.34.0 ### Added

- Yii 2 support #624, #630
- Enable tracing when no autoloaders used by setting `DD_TRACE_NO_AUTOLOADER=true` #627
- Safe to-string conversion for all datatypes on `DDTrace\SpanData` #613

### Changed

- Improve dd-doctor with and container tagging detector when open_basedir is set #629
0.33.0 ### Added
- Trace origin support (Synthetics support) #615
0.32.1 ### Added

- Preview CodeIgniter v2 integration #588
- Preview WordPress v4 integration #570

Please report any issues you encounter with these two preview integrations.

### Fixed

- ZF1 integration response after loading #609
- Prevent `mysqli_connect()` span from closing twice #610
- Support mysqli usage when using real_connect approach #607
0.31.0 ### Added
- Add container id header to http transport (Container Tagging) - #552
- Attach exceptions to spans in new API #548

### Changed
- Migrate PDO integration to sandbox API #538
- Migrate Eloquent integration to sandbox API #559
- Migrate memcached integration to sandbox API #578
- Migrate elasticsearch integration to sandbox API #562

### Fixed
- Predis integration for clusters #574 (thank you @RaoulMeyer!)
- Avoid reserved word "fn" #543
- Fix ZTS builds, remove COMPAT_CTX_* #544
- Curl headers are overwritten when using `curl_copy_handle` function #502
- Correctly treat class names as case insensitive #571
- Static keyword handling #576
- Improve sandboxing of request init hook #583
- Make PHP API check more specific #590 (thank you @iedsapala!)
0.30.2 ### Fixed
- Ensure the request init hook is bound by the `open_basedir` INI directive #579
0.30.0 ### Fixed
- Shutdown span flushing blocking the process when forked #493
- Memory access errors in cases when PHP code was run after extension data was freed on request shutdown #505
- Request init hook working when open_basedir restriction is in effect #505
- Ensure global resources are freed in shutdown #521 #523
- Http transport not setting required `X-Datadog-Trace-Count` header #525

### Changed
- Remove `zend_execute_ex` override and trace `ZEND_DO_UCALL` #519
0.29.0 ### Fixed
- Edge case where the extension version and userland version can get out of sync #488

### Changed
- Prefix hostnames as service names with `host-` to ensure compatibility with the Agent #490
0.28.1 ### Fixed
- Race condition when reading configuration from within writer thread context #486
0.28.0 ### Added
- Officially support Symfony 3.0 and 4.0 #475

### Fixed
- Stack level too deep error due to changes in how PHP interprets Opcodes caused by the extension #477

### Changed
- Backtrace handler will be run only once and will display information about maximum stack size being reached #478
0.27.2 ### Changed
- Valgrind configuration to perform more thorough memory consistency verification #472

### Fixed
- Memory leak detected in tests #472
0.27.1 ### Fixed
- Memory leak when garbage collecting span stacks #469
0.26.0 ### Added
- Initial implementation of flushing spans via background thread #450

### Changed
- URL-normalization rule boundaries #457
0.23.0 **NOTE: We changed the way the service name can be configured. Now you must use `DD_SERVICE_NAME` instead of `DD_TRACE_APP_NAME` for consistency with other tracers. Usage of `DD_TRACE_APP_NAME` is now deprecated and will be removed in a future release.**

### Added
- Support for Lumen 5.2+ #416
- Tracing support from the CLI SAPI #422
- Support for Laravel Artisan #422

### Changed
- Now the way to configure service name is through `DD_SERVICE_NAME` instead of `DD_TRACE_APP_NAME` #432
0.22.0 ### Added
- Official support for PHP 7.3 #429
- Tracer limited mode where spans are not created to preserve resources #417

### Fixed
- Error when a subclassed integration returns an object that cannot be cast as a string #423
0.21.0 ### Added
- `dd_trace_forward_call()` to forward the original call from within a tracing closure #284

### Fixed
- `parent::` keyword not honored from a subclass when forwarding a call from a tracing closure #284
- Private and protected callable strings not resolved properly from a tracing closure #303
0.20.0 ### Added
- Force tracing or discarding trace via special Span tag (manual.keep and manual.drop) #409

### Fixed
- Resource use by caching configuration values instead of processing data on every access #406
0.19.0 ### Changed
- Span and SpanContext main implementation uses public fields to share data to allow faster serialization and overall Span overhead #398
- `DDTrace\Encoders\SpanEncoder::encode()` now takes an instance of `DDTrace\Data\Span` instead of `DDTrace\Contracts\Span` #398
- `DDTrace\Processing\TraceAnalyticsProcessor::process()` now takes an instance of `DDTrace\Data\Span` instead of `DDTrace\Contracts\Span` #398
- Improve performance of setTag and setResource #398
- Load required PHP files in one go #387
- Load optional PHP files without filesystem check #387
0.18.0 **NOTE: THIS IS A BREAKING CHANGE RELEASE**

This change should not impact most users.

### Added
- MessagePack serialization for traces sent to the Agent with a new function `dd_trace_serialize_msgpack()` #378

### Changed
- Request init hook module blacklist now avoids miss matching partial matches #372
- Add 10MB cap to payloads sent to the Agent #388
- Added an `getTracesAsArray()` method to `DDTrace/Contracts/Tracer` which returns an array of spans (which are also encoded as an array.) To encode an instance of `DDTrace\Contracts\Span` as an array, use `DDTrace/Encoders/SpanEncoder::encode($span)` #378
- `DDTrace/Transport::send()` now takes an instance of `DDTrace/Contracts/Tracer` instead of an `array` #378
- `DDTrace/Encoder::encodeTraces()` now takes an instance of `DDTrace/Contracts/Tracer` instead of an `array` #378
- The default encoder is now `DDTrace/Encoders/MessagePack`. You can still use the JSON encoder by setting the environment variable `DD_TRACE_ENCODER=json`. It is generally not recommended to use the JSON encoder as parsing JSON payloads at the Agent level is more CPU & memory intensive.
0.17.0 ### Added
- Integration aware spans #360
- Trace Analytics Client Configuration #367
0.16.1 ### Fixed

- Error traces don't appear in "Total Errors" panel #375
0.16.0 ### Changed
- When shutdown hook is executed we disable all tracing to avoid creating unnecessary spans #361
- Inside request init hook we disable all function tracing when we decide not to trace #361

### Added
- Disable request_init_hook functionality in presence of blacklisted modules via `ddtrace.internal_blacklisted_modules_list=some_module,some_other_module` #345 & #370
- Integration-level configuration #354
- `dd_trace_disable_in_request` function which disables all function tracing until request ends #361

### Fixed
- Symfony template rendering spans #359
- Laravel integration user ID errors #363
- Non-success HTTP response codes aren't properly categorized as errors in the APM UI #366
0.15.1 ### Added
- Symfony 2.3 web tests for resource name #349
- Update images and enable leak detection, split tests in CI to Unit, Integration and Web #299

### Fixed
- Resource name on Symfony 2.x requests served through controllers #341
- Sanitize url in web spans #344
- Laravel 5.8 compatibility #351
0.14.1 ### Fixed
- Large number of mysqli spans not containing relevant information #330
0.14.0 ### Added
- Loading of integrations before knowing if the library will be actually used #319
- Ability to define tracing for not yet defined methods and classes #325
0.13.4 Special thanks to @stayallive for helping us debugging the memory issues in his environment! His help and
guidance were of paramount importance.

### Fixed
- Accessing freed memory when instrumentation code un/instrumented itself #314
- Freeing `$this` object prematurely in PHP-FPM VM #317
0.13.3 ### Fixed
- 7.x handling of `$this` pointer passed to the closure causing errors in PHP VM #311
0.13.2 ### Added
- Optional extension .so files compiled with "-g" flag #306
- Log backtrace on segmentation fault, enabled via ddtrace.log_backtrace=1 #300

### Fixed
- Auto-instrumentation when user's autoloader throws exception on not found #305
0.13.1 ### Fixed
- Honor ddtrace provided by composer if user provided one #276
- Remove unused function that was moved to dispatch_table_dtor() (#291)
- PHP 5.4 incorrectly handling nested internal functions #295
0.13.0 ### Added
- Span::setResource as a legit method # 287
- Logging more span's info when in debug mode # 292

### Fixed
- Symfony 4.2 traces generation #280
- Memory leak and misshandling of return value in PHP 5.4 #281
- Drupal crashes (temporary workaround) #285
- Tracing of http status code in generic web requests #288
- Route not set in symfony 3.4 when user calls exit() #289
- Fix hash table dtor for PHP 7 #290
0.12.0 ### Added
- Support for global tags via the environment variable `DD_TRACE_GLOBAL_TAGS=key1:value1,key2:value2` #273

### Fixed
- Memory leaks in `$this` object and return value handling in PHP 5.6 and 7.x #268
- Alpine APK package file being badly formatted when some file paths were over 100 character long #274
- Extension being compatible with CentOS 6 and other distributions using old Glibc #265
0.11.0 **WARNING: THIS IS A BREAKING CHANGE RELEASE**

This change should not impact most of the users as starting from `0.10.0` it is not required (and not recommended) to
manually set the transport. `DDtrace\Transport\Http` no longer accepts a logger as the second argument as it uses
the globally registered logger. If you are using the `Http` class, just remove the second argument from the constructor
invocation.

### Added
- Support for guzzle 6 #254
- Configurable Sampler #260
- Debug mode for logging #261
- Support for symfony 3.3 #266 and #243
- Build php 5.4 extension locally #267
- Basic tracing for unsupported and custom frameworks #264

### Fixed
- Composer PHP compatibility declaration #247
- Release notes for PECL and fix type-os in CHANGELOG #248
- Add missing files to PECL releases #252
- PHP 5.4 installation and build #255
- Trigger of autoloader un-tracing did not respect object #256
- docker-compose based packages verification #257
- Incorrect tar command in one-liner example from getting_started.md #258 - thanks @danielkay
- Auto-instrumentation in Symfony 3.4 and PHP 5.6 #262
- Type-o in command to install .deb packages #263
0.10.0 **WARNING: THIS IS A BREAKING CHANGE RELEASE**

Refer to the migration guide (/UPGRADE-0.10.md) for a detailed description.

At an high level here are the breaking changes we introduced:

- We removed OpenTracing as a required dependency. We still support OpenTracing, so you can do `OpenTracing\GlobalTracer::get()` in your code and still retrieve a OpenTracing compliant tracer, but OpenTracing dependency is now optional.
- We introduced auto-instrumentation and 1-step installation in place of manual registration of providers/bundles. Before, in order to see traces, you had to install our extension, add two dependencies to the composer file and add a provider (Laravel) or a bundle (Symfony). Starting from now you will only have to install the extension. You still have freedom to manually instrument the code, but only for advanced usage.

### Added
- Request init hook configuration allowing running arbitrary code before actual request execution #175
- Support OpenTracing without depending on it #193
- Initial C extension PHP 5.4 support #205
- Removal of external dependencies to support auto-instrumentation #206
- Migration from namespace based constants to class based constants for tags, formats and types #207
- Track integration loading to avoid re-loading unnecessary ones #211
- Documenting release steps #223
- Ability to run web framework tests in external web server #232
- Support for auto-instrumentation #237
- Support for Zend Framework 1 #238
- `Tracer::startRootSpan()` to track the root `Scope` instance which can be accessed with `Tracer::getRootScope()` #241

### Fixed
- The INI settings now appear in `phpinfo()` and when running `$ php -i` #242
0.9.1 ### Added
- Ability to reset all overrides via `dd_trace_reset`

### Changed
- By default do not throw an exception when method or function doesn't exist

### Fixed
- Eloquent integration calling protected `performInsert` method
0.9.0 ### Added
- PHP code compatibility with PHP 5.4 #194
- Move framework tests to tests root folder #198
- Move integrations tests to tests root folder #200
- Allow testing of multiple library versions #203
- Downgrade of phpunit to 4.* in order to prepare for php 5.4 #208
- Configurable autofinishing of unfinished spans on tracer flush #217

### Fixed
- Predis integration supporting constructor options as an object #187 - thanks @raffaellopaletta
- Properly set http status code tag in Laravel 4 integration #195
- Agent calls traced when using Symfony 3 integration #197
- Fix for trace and span ID's that were improperly serialized on the wire in distributed tracing contexts #204
- Fix noop tracer issues with Laravel integration #220
0.8.1 -