--- title: "Changelog" slug: "php-changelog" description: "Release history of the Mapp Intelligence PHP Library: features, behavior changes, upgrade notes and bug fixes per version." status: "update" updated: 2026-11-02T14:40:19Z published: 2026-11-02T14:40:19Z canonical: "docs.mapp.com/php-changelog" --- > ## Documentation Index > Fetch the complete documentation index at: https://docs.mapp.com/llms.txt > Use this file to discover all available pages before exploring further. # Changelog ## 2.1.0 (2026-10-27) ### Upgrade notes Existing code keeps working in most setups. Check the following changes before you upgrade: - **One instance per request:** `new MappIntelligence($config)` is now public. Create one instance per request. `close()` sends the remaining requests and is also called when the instance is destroyed. `getInstance()` still works. In long-running runtimes (for example RoadRunner, Swoole or Laravel Octane), call `MappIntelligence::reset()` at the end of every request. (see [Classes](/v1/docs/php-classes)) - **Sending:** Adding a request no longer sends a batch when `maxBatchSize` is reached. Requests are sent with `flush()`, `close()` or at the end of the request, and also periodically if `requestInterval` is set. - **Permanent errors discard requests:** 5xx, 408 and 429 are retried. Other 4xx responses discard the batch. (see [Data Transfer: Consumer](/v1/docs/php-data-transfer-consumer)) - `maxQueueSize` **takes effect:** A full queue is sent first. If it is still full, the oldest requests are discarded. `0` means unlimited. - **Cookies:** `getMaxAge()` returns seconds instead of a timestamp. `getUserIdCookie()` only returns the cookie, so add it to the response yourself. `setUserId()` still sets it. - **Setters:** `null` keeps the current value. All other values, including `false`, `0`, `""` and empty lists, are applied. - **Campaigns without an ID:** The campaign is now read from the media codes of the request URL, so campaigns may be tracked where nothing was sent before. (see [Campaign](/v1/docs/campaign-data-object-php-library-s2s)) - **Hybrid:** Only pixel requests (parameter `p`, max. 64 KB) are logged. IP address and user agent sent by the client are ignored and taken from the configuration. - **Cron job:** Failed requests are no longer written back into the log file. Requests that can never be sent are kept in `*.discarded`. Sent files are deleted or renamed to `*.sent`. Runs without files to send and runs that overlap another run end with exit status 0. With `FILE_ROTATION`, only files named `<filePrefix>-<timestamp>…` are sent. (see [Cron Job](/v1/docs/php-cron-job)) - `FORK_CURL` **is deprecated:** Use `CURL` instead. ### Features - **Lifecycle:** `close()`, `MappIntelligence::reset()` and `setOnFlushComplete()` for the tracking and the hybrid instance. - **New options:** `connectionTimeout`, `readTimeout` and `requestInterval`. (see [Integration and Configuration](/v1/docs/php-integration-and-configuration)) - **Custom consumers:** New optional interface `MappIntelligenceBatchResultConsumer`, so a consumer can discard a batch that can never be sent. (see [Interfaces](/v1/docs/php-interfaces)) - **Campaigns:** `setMediaCode()` and `setOncePerSession()` now work server-side. - **Customer:** `setCustomIdentifier()` (`ceid`). (see [User](/v1/docs/user-data-object-php-library-s2s)) - **Engage registration:** New fields for ISO code, ISO language and time zone. (see [Mapp Engage](/v1/docs/mapp-engage-data-object-php-library-s2s)) - **Engage attributes:** All scalar values are accepted (bool, int, float). - **Hybrid:** `track($requestURL)`, `flush()`, `close()` and `getUserIdCookie()`, as in the Java library. - **HTTP consumer:** One connection is reused for all batches of an instance. - **Cron job:** `--deactivate` and `--logLevel` work on the command line. Only one run at a time sends the log files. ### Bugfixes - **Security:** In hybrid tracking, a client could set `X-WT-IP` and `X-WT-UA` and so pretend to be another user. `FORK_CURL` now escapes the payload for the shell. - **Lost or duplicate requests:** Fixed for several PHP processes and the cron job writing to the same files, for overlapping cron job runs, for partially sent and unreadable log files, for file mode `c` overwriting new requests, and for file prefixes that start with the same text. - **Fatal errors:** An unknown consumer type, a `CUSTOM` consumer type without a consumer, `track()` with empty or invalid data, and syntax errors in the configuration file no longer cause fatal errors. - **Configuration file:** List values can be strings, entries are trimmed, and the consumer type is case-insensitive. - **Product collections:** Parameters and categories that only some products have are merged correctly. - **Composer:** `cronjob.php` and `s2s.php` load the Composer autoloader. - **Other:** The version parameter `cs801` is correct again, PHP 8.5 shows no deprecation output, and the default page name reads its parameters from the request URL. --- ## 2.0.0 (2025-10-17) ### Breaking changes This version introduces significant structural updates to improve long-term maintainability and compatibility. #### Key changes: - **Dropped support for PHP 5:** The library now requires PHP 7.0 or higher. Older PHP versions (including PHP 5.x) are no longer supported. - **Introduced PHP Namespaces:** The entire codebase has been refactored to use PHP namespaces, improving structure, maintainability, and support for modern autoloading. #### Developer impact: Custom extensions or integrations may need to be updated to align with the new namespace structure. Please ensure your environment meets the PHP 7.0+ requirement before upgrading. ### Features - **PII support for Engage registration:** Personally identifiable information can now be securely transmitted during the registration process. (see [Mapp Engage](/v1/docs/mapp-engage-data-object-php-library-s2s)) - **Custom Attributes for Engage:** It is now possible to send Mapp Engage Custom Attributes directly via Server-to-Server tracking. (see [Mapp Engage](/v1/docs/mapp-engage-data-object-php-library-s2s)) - **Flexible data forwarding:** You can now choose whether data should be forwarded only to Mapp Intelligence or to both Mapp Intelligence and Mapp Engage. (see [Integration and Configuration](/v1/docs/php-integration-and-configuration)) --- ## 1.1.1 (2023-08-03) ### Feature - Support temporary session ID (see [Data](/v1/docs/php-data)) --- ## 1.1.0 (2023-03-27) ### Feature - Include advanced logging (see [Integration and Configuration](/v1/docs/php-integration-and-configuration)) - Support UserAgent Client Hints (see [Integration and Configuration](/v1/docs/php-integration-and-configuration)) --- ## 1.0.2 (2023-02-01) ### Feature - Include method to suppress certain requests (see [Integration and Configuration](/v1/docs/php-integration-and-configuration)) --- ## 1.0.1 (2022-10-17) ### Optimization - Add tracking parameter (pf, cs801 and cs802) for tracking feature usage --- ## 1.0.0 (2021-01-25) ### Feature - Possibility to configure a custom consumer (see [MappIntelligenceConsumer](/v1/docs/php-data-transfer-consumer)) - Possibility to configure a custom debug logger (see [MappIntelligenceLogger](/v1/docs/php-interfaces)) - Added a new predefined file rotation consumer - Added new classes with constants for all tracking parameter (see [MappIntelligenceParameter](/v1/docs/php-data) and [MappIntelligenceCustomParameter](/v1/docs/php-data)) - Added an easier way to add tracking data (see [MappIntelligenceDataMap](/v1/docs/php-classes), [MappIntelligenceProductCollection](/v1/docs/php-classes) and [MappIntelligenceParameterMap](/v1/docs/php-classes)) - Added of new configuration options (see [MappIntelligenceConfig](/v1/docs/php-integration-and-configuration)) - Refactoring [cronjob](/v1/docs/php-cron-job) and [hybrid](/v1/docs/php-classes) logic --- ## 0.0.1 (2020-04-07) - Beta release