Actions
Bug #55904
closedClass loader loads aliased classes twice
Start date:
2014-02-12
Due date:
% Done:
100%
Estimated time:
TYPO3 Version:
6.2
PHP Version:
Tags:
Complexity:
Is Regression:
No
Sprint Focus:
Description
The class loader tries to load files of aliased classes twice if certain strange circumstances are met.
/srv/www/
and /var/www/
are mounts (not symlinks) of the same harddisk. TYPO3 is used via HTTP (Apache), document root /var/www/typo3/
. TYPO3 is also used on the CLI via document root /srv/www/typo3/
.
The class loading process is as follows:
- Apache: TYPO3 gets used, writes caches.
- CLI: TYPO3 core gets loaded,
/srv/.../GeneralUtility.php
is loaded. - Extension configuration gets loaded. Their paths are loaded from
/var/...
now because of the caches - An extension's
ext_localconf.php
usest3lib_div
, which is handed to the class loader. - Class loader sees it's an alias to
GeneralUtility
and tries to load that first. It calculates the path ofGeneralUtility
to be/var/.../GeneralUtility.php
and does arequire_once
call on it. - PHP loads this file because it does not know that
/srv/.../GeneralUtility.php
is the same file as/var/.../GeneralUtility.php
Fatal error: Cannot redeclare class TYPO3\CMS\Core\Utility\GeneralUtility
While this is an obscure configuration, the fix is easy: Simply check if the class already exists before requiring the file.
I'll contribute a patch.
This error did not happen with 6.2beta4 and started with 6.2beta5, probably because of 890cdbcf4013b2c870e315cce13400f44d3304b6 (bug #55559).
Actions