Download the PHP package konradmichalik/typo3-request-profiler without Composer

On this page you can find all versions of the php package konradmichalik/typo3-request-profiler. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package typo3-request-profiler

![Extension icon](Resources/Public/Icons/Extension.png) # TYPO3 extension `typo3_request_profiler` [![Packagist](https://img.shields.io/packagist/v/konradmichalik/typo3-request-profiler?label=version&logo=packagist)](https://packagist.org/packages/konradmichalik/typo3-request-profiler) [![Packagist Downloads](https://img.shields.io/packagist/dt/konradmichalik/typo3-request-profiler?color=brightgreen)](https://packagist.org/packages/konradmichalik/typo3-request-profiler) ![TYPO3](https://img.shields.io/badge/TYPO3-13.4%20%7C%2014.0-orange.svg) [![Supported PHP Versions](https://img.shields.io/packagist/dependency-v/konradmichalik/typo3-request-profiler/php?logo=php)](https://packagist.org/packages/konradmichalik/typo3-request-profiler) [![CGL](https://img.shields.io/github/actions/workflow/status/konradmichalik/typo3-request-profiler/cgl.yml?label=cgl&logo=github)](https://github.com/konradmichalik/typo3-request-profiler/actions/workflows/cgl.yml) [![Coverage](https://img.shields.io/coverallsCoverage/github/konradmichalik/typo3-request-profiler?logo=coveralls)](https://coveralls.io/github/konradmichalik/typo3-request-profiler) [![Tests](https://img.shields.io/github/actions/workflow/status/konradmichalik/typo3-request-profiler/tests.yml?label=tests&logo=github)](https://github.com/konradmichalik/typo3-request-profiler/actions/workflows/tests.yml) [![License](https://img.shields.io/badge/license-GPL--2.0--or--later-blue.svg)](LICENSE.md)

A dev-only TYPO3 frontend request profiler. It instruments live frontend requests and writes one compact JSON profile per request — SQL queries, N+1 patterns, cache state, and timing — to var/log/profiles/{request_id}.json.

[!IMPORTANT] This extension is active by default only in a Development context (Environment::getContext()->isDevelopment()). Outside Development it stays off and collects no data unless explicitly opted in via TYPO3_REQUEST_PROFILER_FORCE=1 (intended for staging, never real production — see Configuration).

The profiler is a thin, standalone collector with no external dependencies. It is inspired by the Symfony Profiler — and by some of the metrics the TYPO3 Admin Panel surfaces — but records them as compact, machine-readable JSON instead of an interactive panel.

What it captures per request:

🔥 Installation

Requirements

Composer

Packagist Packagist Downloads

TER

TER version TER downloads

Download the zip file from TYPO3 extension repository (TER).

⚙️ Configuration

The profiler is controlled entirely via environment variables:

Variable Default Effect
TYPO3_REQUEST_PROFILER (on) Set to 0 to disable profiling for a request/process.
TYPO3_REQUEST_PROFILER_FORCE (off) Set to 1 to enable profiling outside the Development context (e.g. staging). Must be set deliberately, never in real production.
TYPO3_REQUEST_PROFILER_MIN_MS 0 Only persist requests whose total time exceeds this threshold (ms).
TYPO3_REQUEST_PROFILER_KEEP 50 Number of most-recent profiles to retain; older files are pruned automatically.
TYPO3_REQUEST_PROFILER_TRACE (off) Set to 1 to capture the calling Class::method (file:line) for each query (added as origin to slow_queries/duplicate_queries).
TYPO3_REQUEST_PROFILER_EVENTS (off) Set to 1 to time dispatched PSR-14 events and add an events section (count + the most expensive event classes).

[!NOTE] TYPO3_REQUEST_PROFILER_FORCE is a deployment-level switch evaluated in ext_localconf.php and therefore cached — it is not a live toggle. Changing it requires a cache flush to take effect. This is in contrast to the per-request TYPO3_REQUEST_PROFILER=0, which short-circuits the middleware on each request and needs no cache flush.

[!TIP] TYPO3_REQUEST_PROFILER_TRACE=1 uses debug_backtrace per query and is therefore opt-in for performance. No bound parameter values are ever captured — only the call site.

[!TIP] TYPO3_REQUEST_PROFILER_EVENTS=1 wraps the core PSR-14 dispatcher and measures every dispatched event. Dispatch happens very frequently, so the per-event timing is opt-in. When off, events are dispatched without any measurement and the events section is omitted. Event timing follows the same activation gate as the rest of the profiler, so it also works on staging together with TYPO3_REQUEST_PROFILER_FORCE=1.

💡 Profile Format

Each request produces one JSON file at var/log/profiles/{request_id}.json:

[!NOTE] The log section only appears when the request produced log entries. Only the level and component are recorded — never the message body — so no user data leaks into the profile.

[!NOTE] The events section only appears when TYPO3_REQUEST_PROFILER_EVENTS=1.

Profile schema

The artifact carries an explicit, versioned schema contract via the top-level schemaVersion field. It is written first so it is immediately visible in every file.

Top-level fields (always present):

Field Type Description
schemaVersion int Schema contract version of the artifact (currently 1).
token string Request identifier; also the file name.
time string Request time as ISO 8601 (date('c')).
method string HTTP request method.
url string Request URI with masked query values (?q=?&page=?) — parameter names are kept, values are never persisted (they regularly carry search terms, e-mail addresses or one-time tokens).
status int HTTP response status code.

Section keys (key = Section::name(); each appears only when the section is enabled and produced data):

Key Shape
page { id, type }
cache { hit, cacheable, disabled_reasons[] }
timing { total_ms }
memory { peak_mb }
php { included_files }
queries { count, total_ms }
slow_queries [{ sql, ms, origin? }]
duplicate_queries [{ sql, count, total_ms, origin? }]
log { count, by_level{}, top_components[{ component, count }] }
events { count, total_ms, top[{ event, count, total_ms }] }

[!NOTE] schemaVersion is incremented only when field names or shapes change in a breaking way. Additive changes keep the same version.

Reading profiles

KonradMichalik\Typo3RequestProfiler\Profiling\ProfileReader is the supported, framework-agnostic read API for these artifacts — external consumers should use it instead of re-implementing the glob/sort/json_decode logic:

Method Returns
all() All profiles, newest first.
latest(int $limit = 10) The $limit newest profiles, newest first.
byToken(string $token) A single profile by its token, or null if unknown.

The reader is directory-based and carries no framework dependency — its constructor takes the profiles directory (new ProfileReader($directory)). On the TYPO3 side, that directory is ProfileWriter::defaultDirectory() (the same source the writer persists to). Its public signature is kept stable as a contract for consumers.

🧑‍💻 Contributing

Please have a look at CONTRIBUTING.md.

⭐ License

This project is licensed under GNU General Public License 2.0 (or later).


All versions of typo3-request-profiler with dependencies

PHP Build Version
Package Version
Requires php Version ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0
doctrine/dbal Version ^3.9 || ^4.0
psr/event-dispatcher Version ^1.0
psr/http-message Version ^1.0 || ^2.0
psr/http-server-handler Version ^1.0.2
psr/http-server-middleware Version ^1.0.2
psr/log Version ^3.0.2
typo3/cms-core Version ^13.4 || ^14.0
typo3/cms-frontend Version ^13.4 || ^14.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package konradmichalik/typo3-request-profiler contains the following files

Loading the files please wait ...