[feature/compiled-dic] Use an absolute path for core.root_path parameter

PHPBB3-11152
This commit is contained in:
David King 2012-11-02 16:42:35 -04:00 committed by Igor Wiedler
parent e6a6e85d7e
commit 2de8827b1e

View file

@ -5484,35 +5484,34 @@ function phpbb_create_compiled_container(array $extensions, array $passes, $phpb
return new phpbb_cache_container(); return new phpbb_cache_container();
} }
// When the board is first installed, the container is initiall created on // When the board is first installed, the container is initially created
// the send_statistics step in the ACP. In that case, the phpbb_root_path // during the send_statistics step in the ACP. At that point, the path
// is "./../". This becomes forever stored in the cached container as the // relative to the board root is "./../". This becomes forever stored in
// core.root_path property, until the container is deleted and recached // the cached container as the core.root_path property, until the
// We need to ensure that this does not happen. // container is deleted and recached. We need to ensure that this does
// // not happen.
// However, if we change the root path here, it will try to create a
// ./adm/cache/container.php later on because the root path is wrong
// We need to store the current $phpbb_root_path for use later and then we
// can change it for the controller
$real_root_path = $phpbb_root_path;
if (defined('ADMIN_START')) if (defined('ADMIN_START'))
{ {
// Remove the first instance of ../ in the root path // Remove the first instance of ../ in the root path
$phpbb_root_path = preg_replace('/..\//', '', $phpbb_root_path, 1); $phpbb_root_path = preg_replace('/\.\.\//', '', $phpbb_root_path, 1);
} }
// If we don't have the cached container class, we make it now // We must use an absolute path in the container because we cannot
// First, we create the temporary container so we can access the // change the value at runtime when accessing it in different
// extension_manager // directory levels.
$tmp_container = phpbb_create_container($extensions, $phpbb_root_path, $phpEx); $phpbb_absolute_path = phpbb_realpath($phpbb_root_path);
// Create a temporary container for access to the ext.manager service
$tmp_container = phpbb_create_container($extensions, $phpbb_absolute_path, $phpEx);
$tmp_container->compile(); $tmp_container->compile();
// Now we pass the enabled extension paths into the ext compiler extension // Now pass the enabled extension paths into the ext compiler extension
$extensions[] = new phpbb_di_extension_ext($tmp_container->get('ext.manager')->all_enabled()); $extensions[] = new phpbb_di_extension_ext($tmp_container->get('ext.manager')->all_enabled());
// And create our final container // Create the final container to be compiled and cached
$container = phpbb_create_container($extensions, $phpbb_root_path, $phpEx); $container = phpbb_create_container($extensions, $phpbb_absolute_path, $phpEx);
// Compile the container
foreach ($passes as $pass) foreach ($passes as $pass)
{ {
$container->addCompilerPass($pass); $container->addCompilerPass($pass);
@ -5526,8 +5525,7 @@ function phpbb_create_compiled_container(array $extensions, array $passes, $phpb
'base_class' => 'Symfony\\Component\\DependencyInjection\\ContainerBuilder', 'base_class' => 'Symfony\\Component\\DependencyInjection\\ContainerBuilder',
)); ));
// Use the $real_root_path in case $phpbb_root_path was changed above $file = file_put_contents("{$phpbb_absolute_path}cache/container.{$phpEx}", $cached_container_dump);
$file = file_put_contents("{$real_root_path}cache/container.$phpEx", $cached_container_dump);
return $container; return $container;
} }