PHP Agent Release Notes
Latest Version: 2.14.2
- 2026
- 2025
- 2024
- Before 2024
2026-07-08
v2.14.2
Fixed Fixed an issue where using PDO::exec() on PHP 8.x could cause the request to fail (HTTP 500) due to SQL result count collection.
PDO::exec()returns the affected row count as anint, but the result-count logic calledrowCount()on the PDO connection object (which has no such method), causing an Error on PHP 8.- Now uses the return value of
exec()directly, and only callsrowCount()when the target is an actualPDOStatement. - Occurred only on PHP 8.x with default settings; PHP 5/7,
PDO::query(), and prepared statements were not affected.
Fixed Fixed an incorrect result count for the 2-argument form of cubrid_execute().
- Fixed an issue where
cubrid_execute($conn, $sql)read the result count from the connection instead of the return value, showing-1. Now reads the count from the return value.
New Added an on/off option for SQL result count collection (whatap.profile_sql_fetch_enabled).
- Added a new option (default:
true) to disable the SQL result count collection feature introduced in 2.14.1.
Usage example
# Disable SQL result count collection (default: true)
whatap.profile_sql_fetch_enabled = false2026-06-24
v2.14.1
Feature Added login ID collection
Extracts login IDs from GET/POST parameters and Session objects for per-transaction user identification and login-based statistics.
- Enable with
whatap.trace_login_enabled(default:false). Set the extraction key usingwhatap.trace_login_param_key(single GET/POST parameter key, POST takes priority) and/orwhatap.trace_login_session_key(dot-separated Session path, e.g.,auth.user_id).
Example
# Enable login ID collection (default: false)
whatap.trace_login_enabled = true
# Extract from GET/POST parameter (e.g., login.php?user_id=hong → hong)
whatap.trace_login_param_key = user_id
# Or extract from Session path (e.g., $_SESSION['auth']['user_id'])
whatap.trace_login_session_key = auth.user_id
Feature Added SQL result row count collection
Collects SELECT query result counts and DML (INSERT/UPDATE/DELETE) affected row counts, displayed as a [Result Count] step in the transaction profile.
Supported extensions: mysql, mysqli, PDO, pgsql, oci8, mssql, sqlsrv, odbc, cubrid, and phpredis
- DML (INSERT/UPDATE/DELETE) affected row counts are collected across all supported extensions.
- SELECT result counts are collected for mysql, mysqli, pgsql, cubrid, odbc, and PDO (MySQL / PostgreSQL).
- phpredis collects the number of elements returned by array-returning commands (MGET / HGETALL / KEYS / LRANGE ...).
- DDL statements (CREATE / DROP / TRUNCATE ...) do not operate on rows and are displayed as 0.
SELECT result counts are not available ([Result Count] step not displayed) in some environments: oci8 and sqlsrv (driver does not provide total result count), PDO with SQLite / Oracle, mysqli unbuffered queries (MYSQLI_USE_RESULT), pgsql async functions (pg_send_*). DML affected row counts are still collected normally in these cases.
2026-03-25
v2.14.0
Feature Added PHP 8.5 support
Feature Fixed active stack collection not working on PHP 8.0 or later
- Fixed an issue where
zend_execute_exhook did not work on PHP 8.0 or later, preventing active stack collection - Separated active stack collection logic into a dedicated function and changed to use the
zend_observerAPI for PHP 8.0+
2026-02-04
v2.13.2
Fixed Fixed segfault and zend_mm_heap corrupted errors that occurred during multi-transaction profiling
Fixed an issue where memory corruption caused segfault or zend_mm_heap corrupted errors when the multi-transaction feature was enabled (mtrace_enabled=true).
2026-01-07
v2.13.1
Fixed Fixed an error where debug messages were output in the response content. Fixed an issue where mtid and mcaller_txid debug logs were exposed on web pages when using the multi-transaction (mtrace) feature.
2025-11-19
v2.13.0
Fixed Fixed an issue where Active Status data collection did not work properly.
- In v2.12.0, the PHP internal function hooking method was changed from
zend_execute_internaltohandler overwrite. - This caused a malfunction in Active Status data collection.
New Added support for PHP monitoring on Windows OS.
System Requirements
- Windows Server 2016 (x64) or higher, or Windows 10 (x64) or higher
- PHP 7.0 ~ 8.4 (NTS and ZTS)
Build Environment
- WhaTap PHP extension is built using the Microsoft Visual C++ compiler, with different Visual Studio versions depending on the PHP version.
- Visual C++ 15.0 (Visual Studio 2017) - PHP 7.0–7.4
- Visual C++ 16.0 (Visual Studio 2019) - PHP 8.0–8.3
- Visual C++ 17.0 (Visual Studio 2022) - PHP 8.4
- Build environment by version
PHP Version OS Visual Studio Windows SDK PHP SDK 7.0–7.4 Windows Server 2016 (ltsc2016) VS 2017 (VC15) 10.0.17763.0 2.1.9–2.2.0 8.0–8.3 Windows Server 2019 (ltsc2019) VS 2019 (VS16) 10.0.19041.0 2.2.0 8.4 Windows Server 2022 (ltsc2022) VS 2022 (VS17) 10.0.20348.0 / 11.0.22000.0 2.4.0 - Supported Web Servers
- Apache 2.4 or later
- Microsoft IIS
New Added a stack trace feature to identify delay sections in slow transactions (available under Analysis > Stack).
- How It Works
- Automatically detects transactions running longer than the configured threshold (default: 5 seconds).
- Records running functions every second (up to 20 times).
- Collects stack information using the
debug_gettrace()function within PHP. - Stacks are collected at the end of user function calls, so collection intervals may vary for long-running functions.
CautionEnabling this feature may increase data collection overhead.
- Prerequisites
- Two options must be enabled (enabled by default):
whatap.ext.hook_zend_execute_ex_enablewhatap.profile_method_enabled
- Two options must be enabled (enabled by default):
- Configuration Options
whatap.active_stack_enabled- Default: false
- Enables stack collection feature
whatap.ext.active_stack_start_resp_time- Default: 5000
- Begins stack collection when response time exceeds the threshold
- Default: collects stacks for response times over 5 seconds
- Minimum: 1000ms
CautionRestart the web server (Apache or php-fpm) to apply configuration changes.whatap.ext.active_stack_interval- Default: 1000
- Sets the stack collection interval
- After the first collection, additional stacks are gathered at 1-second intervals
- Minimum: 200ms, Increment: 200ms
CautionRestart the web server (Apache or php-fpm) to apply configuration changes.whatap.trace_active_callstack_depth- Default: 50
- Limits the number of collected stack frames (up to 50)
CautionRestart the web server (Apache or php-fpm) to apply configuration changes.whatap.ext.active_stack_max_count- Default: 20
- Limits the number of stack collections (up to 20)
CautionRestart the web server (Apache or php-fpm) to apply configuration changes.
2025-10-15
v2.12.0
Change Changed the hooking method for PHP internal functions
- The previous method using
zend_execute_internalchecked all functions, which could cause CPU overhead when there were many internal function calls. - The new method replaces handlers for only the necessary PHP internal functions to selectively collect transaction data.
- Added related configuration options:
whatap.ext.hook_overwrite_internal_function_enabled
Default:true
Replaces handlers of only the necessary PHP internal functions to selectively collect transaction data.
Should not be enabled together withwhatap.ext.hook_zend_execute_internal_enabled.
Requires service restart (Apache or php-fpm).whatap.ext.hook_zend_execute_internal_enabled
Default:false
Uses the existing method, collecting transaction data throughzend_execute_internal.
Requires service restart (Apache or php-fpm).whatap.ext.hook_zend_execute_ex_enabled
Default:true
Collects data for PHP user functions usingzend_execute_ex.
Requires service restart (Apache or php-fpm).
2025-07-23
v2.11.2
Fixed Fixed an issue that caused a segmentation fault error
- Fixed a bug that occurred when using the
session_set_save_handlerfunction
2025-07-09
v2.11.1
Fixed Fixed issue with whatap-php.service registration and execution
-
In new installations, the agent was deactivated because it could not recognize connection information (Access Key and server address) due to missing environment values.
You can configure it manually using the commands below:
php command1. /usr/whatap/php/install.sh
2. cp /usr/lib/systemd/system/whatap-php.service /etc/systemd/system/whatap-php.service -
For existing installations, the update works correctly.
2025-06-18
v2.11.0
Feature Reduced CPU load
-
Reduced CPU usage by changing the criteria for determining monitoring targets
-
Further reduction when user-defined function monitoring is disabled
whatap.profile_method_enabled=false
New Display CLI call parameters in URL
-
Collect URL including parameters when called via CLI
- Example: php /home/www/test.php aaa bbb → displays as /home/www/test.php aaa bbb
New Collect file parameter information
- Collects up to 20 parameters, each up to 256 bytes
2025-02-11
v2.10.0
New Added the option to stop collecting for each feature in PHP Extension.
-
whatap.ext.trace_enabled(default:true): Transaction information collection is disabled. -
whatap.ext.profile_enabled(default:true): Basic transaction data collection is disabled. -
whatap.ext.profile_sql_enabled(default:true): SQL profile collection is disabled. -
whatap.ext.profile_httpc_enabled(default:true): HTTP calling profile collection is disabled. -
whatap.ext.profile_socket_enabled(default:true): Socket-related profile collection is disabled.
New Added the option to stop collection based on specific URIs.
-
whatap.ext.ignore_uris: Register URIs for which transaction data is not to be collected (separated by comma).- e.g.
whatap.ext.ignore_uris=/aaa/bbb.php, /ccc/ddd.php
- e.g.
-
whatap.ext.ignore_profile_uris: Register URIs that collect basic transaction data but not detailed profile data (separated by comma).- e.g.
whatap.ext.ignore_profile_uris=/aaa/bbb.php, /ccc/ddd.php
- e.g.
New Added the feature to collect additional transaction data.
-
peak-memory: It collects the peak memory data while running PHP. -
elapsed-utime: It collects the user CPU usage. -
elapsed-stime: It collects the system CPU usage. -
external-func-count: Number of executions of user functions -
prof-external-func-count: Number of user functions traced by WhaTap Monitoring -
internal-func-count: Number of executions of the PHP internal functions -
prof-internal-func-count: Number of internal functions traced by WhaTap Monitoring
Fixed Fixed the issue where a wrong profile is retrieved when searching for a profile because the transaction ID is not uniquely issued in the arm64 (aarch64) environment.
Fixed Fixed the issue where unnecessary data is collected and CPU load is generated despite the setting of the Stop System Resource Collection option.
2024-12-11
v2.9.0
New PHP 8.4 support
Fixed Modified the position of session_start profiling information
When a Redis query is executed inside the session_start function, the function information is now displayed before the Redis query.
Fixed Modified multi-transaction sampling
If multi-transaction sampling is disabled, distributed transaction tracing is stopped even when multiple external HTTP calls occur.
2024-09-11
v2.8.2
New Added the option to prioritize environment variables over the agent configuration file (whatap.ini).
-
Agent settings are applied in the order of whatap.ini and then environment variables.
-
When the
whatap.use_env_firstoption (default value:false) is set, environment variables take precedence over the settings in the whatap.ini file.whatap.iniwhatap.use_env_first=true -
Alternatively, you can set the environment variable as
WHATAP_USE_ENV_FIRST=true.
Fixed Fixed the recognition error for the OKIND environment variable.
You can set okind by using the OKIND or WHATAP_OKIND environment variable.
2024-07-24
v2.8.1
New Added the agent configuration options to collect transaction statistics by IP address.
whatap.stat_ipurl_enabled Boolean, Default
false
Feature Added the agent configuration option for setting the statistics compression transmission.
whatap.stat_zip_enabled Boolean, Default
true
2024-06-19
v2.8.0
New Supported linux aarch64.
Changed Used the security.conf file instead of paramkey.txt
It uses the value of the paramkey key in the previous security.conf file. The default value has been changed to WHATAP instead of a random value. If "WHATAP" is specified, decryption is enabled without entering a key.
Changed Changed the normalization option setting for SQL statements.
-
Always enable normalization by separating parameters in SQL statements. Always set the
whatap.trace_sql_normalize_enabledoption totrue. -
If you have already disabled the normalization option (disable normalization), activate the setting to normalize and display parameters separately.
- Set the
whatap.profile_sql_param_enabledoption totrue. - Normalized parameters are separately encrypted and collected.
- You can check the data by decrypting it with
paramkeyin security.conf.
- Set the
2024-03-06
v2.7.2
Changed Modified to use variables in date format for naming the log monitoring files.
Modified based on the use of Python
strftime(). e.g. 20240101: %Y%m%d
Changed Modified the guide message of the installation script (/usr/whatap/php/install.sh).
2024-01-24
v2.7.1
Fixed Fixed the bug where only the hash (number) value appears, not the name, after setting the whatap.onode option.
Fixed Fix the bug where the whatap-php.service file is not recognized in Ubuntu 14.
2024-01-10
v2.7.0
New PHP 8.3 has been supported.
Feature Trace context (W3C) is supported in the multi-transaction tracing.
OpenTelmetry that supports the trace context, and the multi-transaction tracing correlation are supported.
Changed Modified the resource collection for SQL, Method, and HTTP call.
The differences between resources (CPU, memory) at the start of the transaction and the start of each step are collected.
Changed Modified to newly create the configuration file (whatap.conf) if nothing.
Fixed Fixed the error where the cumulative number of outbound calls are collected wrong as the cumulative time in the active transation list.
Fixed Fixed the whatap-php service (whatap-php.service) execution error in the Linux environment.
Fixed Fixed the segmentation errors from PHP 8.1.0 to 8.1.2 (collection for user functions is stopped).
2023-11-22
v2.6.3
Changed Changed the text cache retention period from one day to one hour
Changed Disabled collection of CPU and memory metrics in Kubernetes environments, replaced with system metrics collected by Kubernetes agent
Fixed Fixed whatap-php service execution error on CentOS 9 or later
Fixed Fixed issue where vCpu info was collected redundantly in Docker container environments
2023-09-13
v2.6.2
Feature Added option for handling large profile data
-
Previously, a maximum of 1024 profile entries were collected. While the limit could be increased via configuration, it caused higher memory usage.
-
Now supports compression and splitting of profiles to collect more without additional memory consumption.
-
whatap.large_profile_enabled Boolean
Default:
falseCollects up to ~10,000 profile steps. For larger collection, use
split_profile_enabled. -
whatap.split_profile_enabled Boolean
Default:
falseSplits large profile data into virtual transactions for collection, displayed as multiple transaction entries.
Feature Added option to compress profile data before transmission
- whatap.profile_zip_enabled Boolean Default:
true
Changed Changed HTTP method exclusion setting to apply to all transactions
-
whatap.ignore_http_methodnow applies to all transactions. -
Previously,
whatap.http_method_urlscontrolled exclusions, but this has been removed in favor of global application.