Recent changes
Wednesday November 04 2026
-
How a request runs in PHP Updated Markdown page
The path of one web request through Exponential's PHP code - index.php, autoload.php, ezpKernel and ezpKernelWeb, request initialization, URL translation, access checks, the module view, the pagelayout and shutdown…
-
Plain CLI scripts with eZScript and ezexec Updated Markdown page
The classic way to write a command line script with eZScript and eZCLI, which still works and which you will meet in older extensions - instance(), startup(), getOptions(), initialize(), shutdown() - plus running…
-
Logs, the log viewer and request logs Updated Markdown page
The log files a PHP developer reads and writes - error.log, warning.log, deprecated.log, 404.log, security.log and your own via eZLog::write() - the log viewer in Setup > Logs and on the command line with explogs.php…
-
Module views as classes Updated Markdown page
How module views, commands and cronjob parts are written as classes since Exponential 6.0.15 - the Runnable hierarchy, the one-line entry files, the scope a view receives, services shared by views and commands, the…
-
OPcache and cache preloading Updated Markdown page
Two different kinds of "preloading" a PHP developer meets in Exponential - the opcode cache (OPcache) and the settings that matter under PHP-FPM and Velocity, and the site cache preloader bin/php/preload.php…
-
Persistent object definitions in depth Updated Markdown page
eZPersistentObject for PHP developers - every key of definition(), the field forms, the condition syntax of fetchObjectList() with operators, ranges and IN lists, sorting, limits and custom fields, store() and sync()…
-
PHP 8 migration notes for your code Updated Markdown page
What to change in older PHP code so it runs cleanly on PHP 8.0 to 8.5 (PHP 7.4 usable without support) under Exponential 6 - dynamic properties, count() on non-arrays, null passed to string functions, SPL return types…
-
Checklists for PHP developers Updated Markdown page
Copyable checklists for PHP work on Exponential - before you write, for every PHP file, for a new class, a view, a command or cronjob part, a datatype or workflow event, security, Velocity compatibility, tests, a commit…
-
The PHP developer's reading path Updated Markdown page
Every page of the PHP developers section in a recommended reading order, in six stages from orientation to contributing, with the time each stage takes and what you can do after it.
-
PHP Developers: start here Updated Markdown page
Where PHP developers start - what Exponential is as a PHP code base, your first hour, the rules every PHP change follows, and a map of every page for PHP developers, from the request life cycle and PHP 8.0 compatibility…
-
PHPUnit without a database Updated Markdown page
How Exponential's PHPUnit setup works for PHP developers - phpunit.xml, tests/bootstrap.php, the test suites and excluded groups, PHPUnit 10 to 13 across PHP 8.1 to 8.5, writing a DB-less test for kernel or extension…
-
Profiling PHP code Updated Markdown page
Measuring and speeding up PHP code in Exponential - exp:benchmark for pages, kernel probes and micro benchmarks, eZDebug accumulators around your own code, the debug bar's SQL and memory figures, the OPcache profile…
-
Reading settings with eZINI Updated Markdown page
The eZINI API for PHP developers - instance(), variable(), hasVariable(), variableArray(), group() and hasGroup(), the order of the settings layers, environment variants, arrays and empty resets, defaults for missing…
-
Security in PHP code Updated Markdown page
The security rules for PHP code in Exponential in one place - validate input, cast numbers, escape SQL and output by context, protect POSTs with the form token, check permissions in every entry point, redirect safely…
-
SQL with eZDB, safely Updated Markdown page
Writing SQL in Exponential with eZDB - instance(), query() and arrayQuery() with limit and offset, escapeString() for strings and (int) casts for numbers, generateSQLINStatement(), transactions with begin(), commit()…
-
Static analysis with PHPStan Updated Markdown page
How Exponential uses PHPStan - level 1 over kernel/ and lib/ with a baseline of existing findings, what is excluded and why, running it locally and in CI, reading a finding, fixing it instead of baselining it, and…
-
Static publishing from the command line and CI Updated Markdown page
For software engineers and PHP developers - build, check and publish a static copy with the exp:static:* commands, read their JSON output, and run it in GitHub Actions from the starter template.
-
Static state traps Updated Markdown page
An explanation of the bugs that come from state kept between requests or tests - function statics, register-once flags, statics assigned outside the class body, per-request caches keyed by time, settings and singletons…
-
Supported PHP versions: 7.4 to 8.5 Updated Markdown page
Which PHP versions Exponential 6 supports and how each is tested - PHP 7.4 as the oldest (8.0 for Velocity), 8.5 as the newest, the composer.json constraint, the CI jobs per version, the differences on 8.0, and what to…
-
The coding standard (phpcs.xml.dist) Updated Markdown page
How PHP code in Exponential is written and checked - every rule of phpcs.xml.dist with an example, the forbidden functions, the PHP 8.0 compatibility check, how only new violations fail, and the commands that run the…