# Environment¶

Since version 9.x the TYPO3 core includes an environment class. This class contains all environment-specific information, e.g. paths within the filesystem. This implementation replaces previously used global variables and constants like PATH_site.

The fully qualified class name is \TYPO3\CMS\Core\Core\Environment. The class provides static methods to access the necessary information.

To simulate environments in testing scenarios, the initialize()-method can be called to adjust the information.

## Environment PHP API¶

### getProjectPath()¶

The environment provides the path to the folder containing the composer.json. For projects without Composer setup, this is equal to getPublicPath().

### getPublicPath()¶

The environment provides the path to the public web folder with index.php for the TYPO3 frontend. This was previously PATH_site. For projects without Composer setup, this is equal to getProjectPath().

### getVarPath()¶

The environment provides the path to the var folder. This folder contains data like logs, sessions, locks, and cache files.

For projects with Composer setup, the value is getProjectPath() . '/var', so it is outside of the web document root - not within getPublicPath().

Without Composer, the value is getPublicPath() . '/typo3temp/var', so within the web document root - a situation that is not optimal from a security point of view.

### getConfigPath()¶

The environment provides the path to typo3conf. This folder contains TYPO3 global configuration files and folders, e.g. LocalConfiguration.php.

For projects with Composer setup, the value is getProjectPath() . '/config', so it is outside of the web document root - not within getPublicPath().

Without Composer, the value is getPublicPath() . '/typo3conf', so within the web document root - a situation that is not optimal from a security point of view.

### getLabelsPath()¶

The environment provides the path to labels, respective l10n folder. This folder contains downloaded translation files.

For projects with Composer setup, the value is getVarPath() . '/labels', so it is outside of the web document root - not within getPublicPath().

Without Composer, the value is getPublicPath() . '/typo3conf/l10n', so within the web document root - a situation that is not optimal from a security point of view.

### getCurrentScript()¶

Returns the path and filename to the current PHP script.

## Configuring Environment Paths¶

The TYPO3 constant PATH_site acts as a basis for any PHP entry point. It can be overwritten via the environment variable TYPO3_PATH_ROOT.

The variable TYPO3_PATH_ROOT is automatically calculated and set for any Composer-based TYPO3 installation, making it possible to e.g. run the TYPO3 command line interface from any location.

The environment variable called TYPO3_PATH_APP is used to allow to store data outside of the document root.

All Composer-based installations benefit from this functionality, as data that was previously stored and hard-coded within typo3temp/var/ is now stored within the project root folder var/.

For non-composer installations (Classic Mode), it is possible to set the environment variable to a folder, usually one level upwards than the regular webroot. This increases security for any TYPO3 installation as files are not publicly accessible (for example via web browser) anymore.

A typical example:

• TYPO3_PATH_APP is set to /var/www/my-project.
• The web folder is then set to TYPO3_PATH_ROOT /var/www/my-project/public.

Non-public files are then put to

• /var/www/my-project/var/session (like Maintenance Tool Session files)
• /var/www/my-project/var/cache (Caching Framework data)
• /var/www/my-project/var/lock (Files related to locking)
• /var/www/my-project/var/log (Files related to logging)
• /var/www/my-project/var/extensionmanager (Files related to extension manager data)
• /var/www/my-project/var/transient (Files related to import/export, core updater, FAL)

For installations without this setting, there are minor differences in the folder structure:

• typo3temp/var/cache is used instead of typo3temp/var/Cache
• typo3temp/var/log is used instead of typo3temp/var/logs
• typo3temp/var/lock is used instead of typo3temp/var/locks
• typo3temp/var/session is used instead of typo3temp/var/InstallToolSessions
• typo3temp/var/extensionmanager is used instead of typo3temp/var/ExtensionManager

Important

Although it is a most common understanding in the TYPO3 world that typo3temp/ can be removed at any time, it is considered bad practice to remove the whole folder. Developers should selectively remove folders relevant to the changes made.