RuntimeException (500)
Failed to read theme.yaml: Creating directory failed for /home/r40i1v2umdct/stormystuff.com/cache/gantry5/amss/compiled/yaml/5cd5f72956acb542f0d93d813802631c.yaml.php
Previous exceptions
  • Creating directory failed for /home/r40i1v2umdct/stormystuff.com/cache/gantry5/amss/compiled/yaml/5cd5f72956acb542f0d93d813802631c.yaml.php (0)
RuntimeException thrown with message "Failed to read theme.yaml: Creating directory failed for /home/r40i1v2umdct/stormystuff.com/cache/gantry5/amss/compiled/yaml/5cd5f72956acb542f0d93d813802631c.yaml.php" Stacktrace: #20 RuntimeException in /home/r40i1v2umdct/stormystuff.com/libraries/gantry5/src/classes/Gantry/Component/File/CompiledFile.php:127 #19 RuntimeException in /home/r40i1v2umdct/stormystuff.com/libraries/gantry5/vendor/rockettheme/toolbox/File/src/AbstractFile.php:348 #18 RocketTheme\Toolbox\File\AbstractFile:save in /home/r40i1v2umdct/stormystuff.com/libraries/gantry5/vendor/rockettheme/toolbox/File/src/PhpFile.php:46 #17 RocketTheme\Toolbox\File\PhpFile:save in /home/r40i1v2umdct/stormystuff.com/libraries/gantry5/src/classes/Gantry/Component/File/CompiledFile.php:111 #16 Gantry\Component\File\CompiledYamlFile:content in /home/r40i1v2umdct/stormystuff.com/libraries/gantry5/src/classes/Gantry/Component/Theme/ThemeDetails.php:58 #15 Gantry\Component\Theme\ThemeDetails:__construct in /home/r40i1v2umdct/stormystuff.com/libraries/gantry5/src/classes/Gantry/Component/Theme/ThemeTrait.php:494 #14 Gantry\Framework\Theme:details in /home/r40i1v2umdct/stormystuff.com/libraries/gantry5/src/classes/Gantry/Component/Theme/ThemeTrait.php:550 #13 Gantry\Framework\Theme:__set in /home/r40i1v2umdct/stormystuff.com/libraries/gantry5/src/classes/Gantry/Framework/Theme.php:185 #12 Gantry\Framework\Theme:init in /home/r40i1v2umdct/stormystuff.com/libraries/gantry5/src/classes/Gantry/Component/Theme/AbstractTheme.php:69 #11 Gantry\Component\Theme\AbstractTheme:__construct in /home/r40i1v2umdct/stormystuff.com/templates/amss/includes/theme.php:28 #10 plgSystemGantry5:{closure} in /home/r40i1v2umdct/stormystuff.com/libraries/gantry5/compat/vendor/pimple/pimple/src/Pimple/Container.php:122 #9 Pimple\Container:offsetGet in /home/r40i1v2umdct/stormystuff.com/plugins/system/gantry5/gantry5.php:307 #8 plgSystemGantry5:onAfterRouteSite in /home/r40i1v2umdct/stormystuff.com/plugins/system/gantry5/gantry5.php:112 #7 plgSystemGantry5:onAfterRoute in /home/r40i1v2umdct/stormystuff.com/libraries/joomla/event/event.php:70 #6 JEvent:update in /home/r40i1v2umdct/stormystuff.com/libraries/joomla/event/dispatcher.php:160 #5 JEventDispatcher:trigger in /home/r40i1v2umdct/stormystuff.com/libraries/src/Application/BaseApplication.php:108 #4 Joomla\CMS\Application\BaseApplication:triggerEvent in /home/r40i1v2umdct/stormystuff.com/libraries/src/Application/CMSApplication.php:1218 #3 Joomla\CMS\Application\CMSApplication:route in /home/r40i1v2umdct/stormystuff.com/libraries/src/Application/SiteApplication.php:796 #2 Joomla\CMS\Application\SiteApplication:route in /home/r40i1v2umdct/stormystuff.com/libraries/src/Application/SiteApplication.php:218 #1 Joomla\CMS\Application\SiteApplication:doExecute in /home/r40i1v2umdct/stormystuff.com/libraries/src/Application/CMSApplication.php:225 #0 Joomla\CMS\Application\CMSApplication:execute in /home/r40i1v2umdct/stormystuff.com/index.php:49
Stack frames (21)
20
RuntimeException
/src/classes/Gantry/Component/File/CompiledFile.php127
19
RuntimeException
/vendor/rockettheme/toolbox/File/src/AbstractFile.php348
18
RocketTheme\Toolbox\File\AbstractFile save
/vendor/rockettheme/toolbox/File/src/PhpFile.php46
17
RocketTheme\Toolbox\File\PhpFile save
/src/classes/Gantry/Component/File/CompiledFile.php111
16
Gantry\Component\File\CompiledYamlFile content
/src/classes/Gantry/Component/Theme/ThemeDetails.php58
15
Gantry\Component\Theme\ThemeDetails __construct
/src/classes/Gantry/Component/Theme/ThemeTrait.php494
14
Gantry\Framework\Theme details
/src/classes/Gantry/Component/Theme/ThemeTrait.php550
13
Gantry\Framework\Theme __set
/src/classes/Gantry/Framework/Theme.php185
12
Gantry\Framework\Theme init
/src/classes/Gantry/Component/Theme/AbstractTheme.php69
11
Gantry\Component\Theme\AbstractTheme __construct
/home/r40i1v2umdct/stormystuff.com/templates/amss/includes/theme.php28
10
plgSystemGantry5 {closure}
/compat/vendor/pimple/pimple/src/Pimple/Container.php122
9
Pimple\Container offsetGet
/home/r40i1v2umdct/stormystuff.com/plugins/system/gantry5/gantry5.php307
8
plgSystemGantry5 onAfterRouteSite
/home/r40i1v2umdct/stormystuff.com/plugins/system/gantry5/gantry5.php112
7
plgSystemGantry5 onAfterRoute
/home/r40i1v2umdct/stormystuff.com/libraries/joomla/event/event.php70
6
JEvent update
/home/r40i1v2umdct/stormystuff.com/libraries/joomla/event/dispatcher.php160
5
JEventDispatcher trigger
/home/r40i1v2umdct/stormystuff.com/libraries/src/Application/BaseApplication.php108
4
Joomla\CMS\Application\BaseApplication triggerEvent
/home/r40i1v2umdct/stormystuff.com/libraries/src/Application/CMSApplication.php1218
3
Joomla\CMS\Application\CMSApplication route
/home/r40i1v2umdct/stormystuff.com/libraries/src/Application/SiteApplication.php796
2
Joomla\CMS\Application\SiteApplication route
/home/r40i1v2umdct/stormystuff.com/libraries/src/Application/SiteApplication.php218
1
Joomla\CMS\Application\SiteApplication doExecute
/home/r40i1v2umdct/stormystuff.com/libraries/src/Application/CMSApplication.php225
0
Joomla\CMS\Application\CMSApplication execute
/home/r40i1v2umdct/stormystuff.com/index.php49
 
                    // If compiled file wasn't already locked by another process, save it.
                    if ($file->locked() !== false) {
                        $file->save($cache);
                        $file->unlock();
 
                        // Compile cached file into bytecode cache
                        if (function_exists('opcache_invalidate')) {
                            // Silence error in case if `opcache.restrict_api` directive is set.
                            @opcache_invalidate($file->filename(), true);
                        }
                    }
                }
                $file->free();
 
                $this->content = $cache['data'];
            }
 
        } catch (\Exception $e) {
            throw new \RuntimeException(sprintf('Failed to read %s: %s', Gantry::basename($this->filename), $e->getMessage()), 500, $e);
        }
 
        return parent::content($var);
    }
}
 
 
        if ($data !== null) {
            $this->content($data);
        }
 
        $filename = $this->filename;
 
        if (is_link($filename)) {
            $realname = realpath($filename);
            if ($realname === false) {
                throw new RuntimeException('Failed to save file ' . $filename);
            }
 
            $filename = $realname;
        }
 
        $dir = dirname($filename);
 
        if (!$dir || !$this->mkdir($dir)) {
            throw new RuntimeException('Creating directory failed for ' . $filename);
        }
 
        try {
            if ($this->handle) {
                $tmp = true;
                // As we are using non-truncating locking, make sure that the file is empty before writing.
                if (@ftruncate($this->handle, 0) === false || @fwrite($this->handle, $this->raw()) === false) {
                    // Writing file failed, throw an error.
                    $tmp = false;
                }
            } else {
                // Create file with a temporary name and rename it to make the save action atomic.
                $tmp = $this->tempname($filename);
                if (file_put_contents($tmp, $this->raw()) === false) {
                    $tmp = false;
                } elseif (@rename($tmp, $filename) === false) {
                    @unlink($tmp);
                    $tmp = false;
                }
            }
Exception message: Creating directory failed for /home/r40i1v2umdct/stormystuff.com/cache/gantry5/amss/compiled/yaml/5cd5f72956acb542f0d93d813802631c.yaml.php
     * @return array
     */
    public function content($var = null)
    {
        /** @var array $content */
        $content = parent::content($var);
 
        return $content;
    }
 
    /**
     * Saves PHP file and invalidates opcache.
     *
     * @param  mixed  $data  Optional data to be saved, usually array.
     * @return void
     * @throws RuntimeException
     */
    public function save($data = null)
    {
        parent::save($data);
 
        // Invalidate configuration file from the opcache.
        if (null !== $this->filename && function_exists('opcache_invalidate')) {
            @opcache_invalidate($this->filename, true);
        }
    }
 
    /**
     * Check contents and make sure it is in correct format.
     *
     * @param mixed $var
     * @return array
     * @throws RuntimeException
     */
    protected function check($var)
    {
        if (!(is_array($var) || is_object($var))) {
            throw new RuntimeException('Provided data is not an array');
        }
 
                ) {
                    // Attempt to lock the file for writing.
                    try {
                        $file->lock(false);
                    } catch (\Exception $e) {
                        // Another process has locked the file; we will check this in a bit.
                    }
 
                    // Decode RAW file into compiled array.
                    $data = $this->decode($this->raw());
                    $cache = [
                        '@class' => $class,
                        'filename' => $this->filename,
                        'modified' => $modified,
                        'data' => $data
                    ];
 
                    // If compiled file wasn't already locked by another process, save it.
                    if ($file->locked() !== false) {
                        $file->save($cache);
                        $file->unlock();
 
                        // Compile cached file into bytecode cache
                        if (function_exists('opcache_invalidate')) {
                            // Silence error in case if `opcache.restrict_api` directive is set.
                            @opcache_invalidate($file->filename(), true);
                        }
                    }
                }
                $file->free();
 
                $this->content = $cache['data'];
            }
 
        } catch (\Exception $e) {
            throw new \RuntimeException(sprintf('Failed to read %s: %s', Gantry::basename($this->filename), $e->getMessage()), 500, $e);
        }
 
        return parent::content($var);
    }
     *
     * @param string $theme
     */
    public function __construct($theme)
    {
        $gantry = Gantry::instance();
 
        /** @var UniformResourceLocator $locator */
        $locator = $gantry['locator'];
 
        $filename = $locator->findResource("gantry-themes://{$theme}/custom/gantry/theme.yaml") ?: $locator->findResource("gantry-themes://{$theme}/gantry/theme.yaml");
        if (!$filename) {
            throw new \RuntimeException(sprintf('Theme %s not found', $theme), 404);
        }
 
        /** @var string $cache */
        $cache = $locator->findResource("gantry-cache://{$theme}/compiled/yaml", true, true);
 
        $file = CompiledYamlFile::instance($filename);
        $this->items = (array)$file->setCachePath($cache)->content();
        $file->free();
 
        $this->offsetSet('name', $theme);
 
        $parent = (string) $this->get('configuration.theme.parent', $theme);
        $parent = $parent !== $theme ? $parent : null;
 
        $this->offsetSet('parent', $parent);
    }
 
    /**
     * @return string
     */
    public function addStreams()
    {
        $gantry = Gantry::instance();
 
        // Initialize theme stream.
        $streamName = $this->addStream($this->offsetGet('name'), $this->getPaths());
 
        return $this->segments;
    }
 
    /**
     * Prepare layout for rendering. Initializes all CSS/JS in particles.
     */
    public function prepare()
    {
        $this->segments();
    }
 
    /**
     * Returns details of the theme.
     *
     * @return ThemeDetails
     */
    public function details()
    {
        if (!$this->details) {
            $this->details = new ThemeDetails($this->name);
        }
        return $this->details;
    }
 
    /**
     * Returns configuration of the theme.
     *
     * @return array
     */
    public function configuration()
    {
        return (array) $this->details()['configuration'];
    }
 
    /**
     * Function to convert block sizes into CSS classes.
     *
     * @param $text
     * @return string
     */
            '9.1'  => 'size-9-1',
            '8.3'  => 'size-8-3'
        ];
 
        return isset($sizes[$number]) ? ' ' . $sizes[$number] : 'size-' . (int) $number;
    }
 
    /**
     * Magic setter method
     *
     * @param mixed $offset Asset name value
     * @param mixed $value  Asset value
     */
    public function __set($offset, $value)
    {
        if ($offset === 'title') {
            $offset = 'name';
        }
 
        $this->details()->offsetSet('details.' . $offset, $value);
    }
 
    /**
     * Magic getter method
     *
     * @param  mixed $offset Asset name value
     * @return mixed         Asset value
     */
    public function __get($offset)
    {
        if ($offset === 'title') {
            $offset = 'name';
        }
 
        $value = $this->details()->offsetGet('details.' . $offset);
 
        if ($offset === 'version' && is_int($value)) {
            $value .= '.0';
        }
 
 
        // FIXME: Do not hardcode this file.
        $language->load('files_gantry5_nucleus', JPATH_SITE);
 
        if ($application->isClient('site')) {
            // Load our custom positions file as frontend requires the strings to be there.
            $filename = $locator("gantry-theme://language/en-GB/en-GB.tpl_{$this->name}_positions.ini");
 
            if ($filename) {
                $language->load("tpl_{$this->name}_positions", \dirname(\dirname(\dirname($filename))), 'en-GB');
            }
 
            // Load template language files, including overrides.
            $paths = $locator->findResources('gantry-theme://language');
            foreach (array_reverse($paths) as $path) {
                $language->load("tpl_{$this->name}", \dirname($path));
            }
        }
 
        $this->language = 'en-gb';
        $this->direction = 'ltr';
        $this->url = Uri::root(true) . '/templates/' . $this->name;
 
        PluginHelper::importPlugin('gantry5');
 
        // Trigger the onGantryThemeInit event.
        $application->triggerEvent('onGantry5ThemeInit', ['theme' => $this]);
    }
 
    /**
     * Get list of twig paths.
     *
     * @return array
     */
    public static function getTwigPaths()
    {
        /** @var UniformResourceLocator $locator */
        $locator = static::gantry()['locator'];
 
        return $locator->mergeResources(['gantry-theme://twig', 'gantry-engine://twig']);
 
    /** @var Environment|null */
    protected $renderer;
 
    /**
     * Construct theme object.
     *
     * @param string $path
     * @param string $name
     */
    public function __construct($path, $name = null)
    {
        if (!is_dir($path)) {
            throw new \LogicException('Theme not found!');
        }
 
        $this->name = $name ?: Gantry::basename($path);
        $this->path = $path;
 
        $this->init();
    }
 
    /**
     * Get context for render().
     *
     * @param array $context
     * @return array
     */
    public function getContext(array $context)
    {
        $context['theme'] = $this;
 
        return $context;
    }
 
    /**
     * Define twig environment.
     *
     * @param Environment $twig
     * @param LoaderInterface $loader
 */
 
class_exists('\\Gantry\\Framework\\Gantry') or die;
 
// Define the template.
class GantryTheme extends \Gantry\Framework\Theme {}
 
// Initialize theme stream.
$gantry['platform']->set(
    'streams.gantry-theme.prefixes',
    ['' => [
        "gantry-themes://{$gantry['theme.name']}/custom",
        "gantry-themes://{$gantry['theme.name']}",
        "gantry-themes://{$gantry['theme.name']}/common"
    ]]
);
 
// Define Gantry services.
$gantry['theme'] = function ($c)  {
    return new GantryTheme($c['theme.path'], $c['theme.name']);
};
 
    {
        if (!isset($this->keys[$id])) {
            throw new UnknownIdentifierException($id);
        }
 
        if (
            isset($this->raw[$id])
            || !\is_object($this->values[$id])
            || isset($this->protected[$this->values[$id]])
            || !\method_exists($this->values[$id], '__invoke')
        ) {
            return $this->values[$id];
        }
 
        if (isset($this->factories[$this->values[$id]])) {
            return $this->values[$id]($this);
        }
 
        $raw = $this->values[$id];
        $val = $this->values[$id] = $raw($this);
        $this->raw[$id] = $raw;
 
        $this->frozen[$id] = true;
 
        return $val;
    }
 
    /**
     * Checks if a parameter or an object is set.
     *
     * @param string $id The unique identifier for the parameter or object
     *
     * @return bool
     */
    #[\ReturnTypeWillChange]
    public function offsetExists($id)
    {
        return isset($this->keys[$id]);
    }
 
            $gantry = Gantry::instance();
 
            // Initialize the template.
            $gantry['theme.path'] = JPATH_THEMES . "/{$templateName}";
            $gantry['theme.name'] = $templateName;
 
            $classPath = $gantry['theme.path'] . '/custom/includes/theme.php';
            if (!is_file($classPath)) {
                $classPath = $gantry['theme.path'] . '/includes/theme.php';
            }
 
            include_once $classPath;
        }
 
        if (\GANTRY_DEBUGGER) {
            Debugger::addMessage("Using Gantry 5 template {$templateName}");
        }
 
        /** @var Theme $theme */
        $theme = $gantry['theme'];
 
        $assignments = new Assignments();
 
        if (\GANTRY_DEBUGGER) {
            Debugger::addMessage('Selecting outline (rules, matches, scores):', 'debug');
            Debugger::addMessage($assignments->getPage(), 'debug');
            Debugger::addMessage($assignments->loadAssignments(), 'debug');
            Debugger::addMessage($assignments->matches(), 'debug');
            Debugger::addMessage($assignments->scores(), 'debug');
        }
 
        $theme->setLayout($assignments->select());
 
        if ($this->params->get('asset_timestamps', 1)) {
            $age = (int)($this->params->get('asset_timestamps_period', 7) * 86400);
            Document::$timestamp_age = $age > 0 ? $age : PHP_INT_MAX;
        } else {
            Document::$timestamp_age = 0;
        }
    }
 
    /**
     * Return global configuration for Gantry5.
     *
     * @param array $global
     */
    public function onGantryGlobalConfig(&$global)
    {
        $global = $this->params->toArray();
    }
 
    public function onAfterRoute()
    {
        if (version_compare(JVERSION, '4.0', '<')) {
            // In Joomla 3.9 we need to make sure that user identity has been loaded.
            $this->app->loadIdentity();
        }
 
        if ($this->app->isClient('site')) {
            $this->onAfterRouteSite();
 
        } elseif ($this->app->isClient('administrator')) {
            $this->onAfterRouteAdmin();
        }
    }
 
    /**
     * Document gets set during dispatch, we need language and direction.
     */
    public function onAfterDispatch()
    {
        if (class_exists('Gantry\Framework\Gantry')) {
            $this->onAfterDispatchSiteAdmin();
        }
    }
 
    public function onAfterRender()
    {
        if ($this->app->isClient('site') && class_exists('Gantry\Framework\Gantry')) {
            $this->onAfterRenderSite();
     * @param   array  &$args  Arguments
     *
     * @return  mixed  Routine return value
     *
     * @since   1.5
     */
    public function update(&$args)
    {
        // First let's get the event from the argument array.  Next we will unset the
        // event argument as it has no bearing on the method to handle the event.
        $event = $args['event'];
        unset($args['event']);
 
        /*
         * If the method to handle an event exists, call it and return its return
         * value.  If it does not exist, return null.
         */
        if (method_exists($this, $event))
        {
            return call_user_func_array(array($this, $event), array_values($args));
        }
    }
}
 
        if (!isset($this->_methods[$event]) || empty($this->_methods[$event]))
        {
            // No Plugins Associated To Event!
            return $result;
        }
 
        // Loop through all plugins having a method matching our event
        foreach ($this->_methods[$event] as $key)
        {
            // Check if the plugin is present.
            if (!isset($this->_observers[$key]))
            {
                continue;
            }
 
            // Fire the event for an object based observer.
            if (is_object($this->_observers[$key]))
            {
                $args['event'] = $event;
                $value = $this->_observers[$key]->update($args);
            }
            // Fire the event for a function based observer.
            elseif (is_array($this->_observers[$key]))
            {
                $value = call_user_func_array($this->_observers[$key]['handler'], array_values($args));
            }
 
            if (isset($value))
            {
                $result[] = $value;
            }
        }
 
        return $result;
    }
 
    /**
     * Attach an observer object
     *
     * @param   object  $observer  An observer object to attach
        }
 
        return $this;
    }
 
    /**
     * Calls all handlers associated with an event group.
     *
     * @param   string  $event  The event name.
     * @param   array   $args   An array of arguments (optional).
     *
     * @return  array   An array of results from each function call, or null if no dispatcher is defined.
     *
     * @since   3.0.0
     */
    public function triggerEvent($event, array $args = null)
    {
        if ($this->dispatcher instanceof \JEventDispatcher)
        {
            return $this->dispatcher->trigger($event, $args);
        }
 
        return;
    }
 
    /**
     * Allows the application to load a custom or default dispatcher.
     *
     * The logic and options for creating this object are adequately generic for default cases
     * but for many applications it will make sense to override this method and create event
     * dispatchers, if required, based on more specific needs.
     *
     * @param   \JEventDispatcher  $dispatcher  An optional dispatcher object. If omitted, the factory dispatcher is created.
     *
     * @return  BaseApplication This method is chainable.
     *
     * @since   3.0.0
     */
    public function loadDispatcher(\JEventDispatcher $dispatcher = null)
    {
 
                    $this->setHeader('Expires', 'Wed, 17 Aug 2005 00:00:00 GMT', true);
                    $this->setHeader('Last-Modified', gmdate('D, d M Y H:i:s') . ' GMT', true);
                    $this->setHeader('Cache-Control', 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0', false);
                    $this->setHeader('Pragma', 'no-cache');
                    $this->sendHeaders();
 
                    $this->redirect((string) $oldUri, 301);
                }
            }
        }
 
        foreach ($result as $key => $value)
        {
            $this->input->def($key, $value);
        }
 
        // Trigger the onAfterRoute event.
        \JPluginHelper::importPlugin('system');
        $this->triggerEvent('onAfterRoute');
    }
 
    /**
     * Sets the value of a user state variable.
     *
     * @param   string  $key    The path of the state.
     * @param   mixed   $value  The value of the variable.
     *
     * @return  mixed  The previous state, if one existed.
     *
     * @since   3.2
     */
    public function setUserState($key, $value)
    {
        $session = \JFactory::getSession();
        $registry = $session->get('registry');
 
        if ($registry !== null)
        {
            return $registry->set($key, $value);
 
        parent::render();
    }
 
    /**
     * Route the application.
     *
     * Routing is the process of examining the request environment to determine which
     * component should receive the request. The component optional parameters
     * are then set in the request object to be processed when the application is being
     * dispatched.
     *
     * @return  void
     *
     * @since   3.2
     */
    protected function route()
    {
        // Execute the parent method
        parent::route();
 
        $Itemid = $this->input->getInt('Itemid', null);
        $this->authorise($Itemid);
    }
 
    /**
     * Set the current state of the detect browser option.
     *
     * @param   boolean  $state  The new state of the detect browser option
     *
     * @return    boolean     The previous state
     *
     * @since    3.2
     */
    public function setDetectBrowser($state = false)
    {
        $old = $this->_detect_browser;
        $this->_detect_browser = $state;
 
        return $old;
        $this->triggerEvent('onAfterDispatch');
    }
 
    /**
     * Method to run the Web application routines.
     *
     * @return  void
     *
     * @since   3.2
     */
    protected function doExecute()
    {
        // Initialise the application
        $this->initialiseApp();
 
        // Mark afterInitialise in the profiler.
        JDEBUG ? $this->profiler->mark('afterInitialise') : null;
 
        // Route the application
        $this->route();
 
        // Mark afterRoute in the profiler.
        JDEBUG ? $this->profiler->mark('afterRoute') : null;
 
        /*
         * Check if the user is required to reset their password
         *
         * Before $this->route(); "option" and "view" can't be safely read using:
         * $this->input->getCmd('option'); or $this->input->getCmd('view');
         * ex: due of the sef urls
         */
        $this->checkUserRequireReset('com_users', 'profile', 'edit', 'com_users/profile.save,com_users/profile.apply,com_users/user.logout');
 
        // Dispatch the application
        $this->dispatch();
 
        // Mark afterDispatch in the profiler.
        JDEBUG ? $this->profiler->mark('afterDispatch') : null;
    }
 
            array('option', 'view', 'format', 'lang', 'Itemid', 'template', 'templateStyle', 'task'),
            function($systemVariable) use ($input) {
                return $input->exists($systemVariable) && is_array($input->getRaw($systemVariable));
            }
        );
 
        // Unset invalid system variables
        foreach ($invalidInputVariables as $systemVariable)
        {
            $input->set($systemVariable, null);
        }
 
        // Abort when there are invalid variables
        if ($invalidInputVariables)
        {
            throw new \RuntimeException('Invalid input, aborting application.');
        }
 
        // Perform application routines.
        $this->doExecute();
 
        // If we have an application document object, render it.
        if ($this->document instanceof \JDocument)
        {
            // Render the application output.
            $this->render();
        }
 
        if ($this->get('block_floc', 1))
        {
            $headers = $this->getHeaders();
 
            $notPresent = true;
 
            foreach ($headers as $header)
            {
                if (strtolower($header['name']) === 'permissions-policy')
                {
                    // Append interest-cohort if the Permissions-Policy is not set
                    if (strpos($header['value'], 'interest-cohort') === false)
{
    include_once __DIR__ . '/defines.php';
}
 
if (!defined('_JDEFINES'))
{
    define('JPATH_BASE', __DIR__);
    require_once JPATH_BASE . '/includes/defines.php';
}
 
require_once JPATH_BASE . '/includes/framework.php';
 
// Set profiler start time and memory usage and mark afterLoad in the profiler.
JDEBUG ? JProfiler::getInstance('Application')->setStart($startTime, $startMem)->mark('afterLoad') : null;
 
// Instantiate the application.
$app = JFactory::getApplication('site');
 
// Execute the application.
$app->execute();
 

Environment & details:

Key Value
option com_k2
id 253
view item
Itemid 269
empty
empty
Key Value
758d35b880546542d697027a0b356f25 ab445008bfc5ff243e94d0698ee00fff
Key Value
joomla TzoyNDoiSm9vbWxhXFJlZ2lzdHJ5XFJlZ2lzdHJ5IjozOntzOjc6IgAqAGRhdGEiO086ODoic3RkQ2xhc3MiOjE6e3M6OToiX19kZWZhdWx0IjtPOjg6InN0ZENsYXNzIjozOntzOjc6InNlc3Npb24iO086ODoic3RkQ2xhc3MiOjM6e3M6NzoiY291bnRlciI7aToxO3M6NToidGltZXIiO086ODoic3RkQ2xhc3MiOjM6e3M6NToic3RhcnQiO2k6MTc3NjM3MDYwMDtzOjQ6Imxhc3QiO2k6MTc3NjM3MDYwMDtzOjM6Im5vdyI7aToxNzc2MzcwNjAwO31zOjY6ImNsaWVudCI7Tzo4OiJzdGRDbGFzcyI6MTp7czo5OiJmb3J3YXJkZWQiO3M6MTI6IjEwLjEuMTM0LjIxMyI7fX1zOjg6InJlZ2lzdHJ5IjtPOjI0OiJKb29tbGFcUmVnaXN0cnlcUmVnaXN0cnkiOjM6e3M6NzoiACoAZGF0YSI7Tzo4OiJzdGRDbGFzcyI6MDp7fXM6MTQ6IgAqAGluaXRpYWxpemVkIjtiOjA7czo5OiJzZXBhcmF0b3IiO3M6MToiLiI7fXM6NDoidXNlciI7TzoyMDoiSm9vbWxhXENNU1xVc2VyXFVzZXIiOjE6e3M6MjoiaWQiO2k6MDt9fX1zOjE0OiIAKgBpbml0aWFsaXplZCI7YjowO3M6OToic2VwYXJhdG9yIjtzOjE6Ii4iO30=
Key Value
LSPHP_ENABLE_USER_INI on
HTTP_HOST www.stormystuff.com
DOCUMENT_ROOT /home/r40i1v2umdct/stormystuff.com
PATH /usr/local/bin:/usr/bin:/bin
TEMP /tmp
TMP /tmp
TMPDIR /tmp
PWD /
HTTP_ACCEPT */*
HTTP_ACCEPT_ENCODING gzip, br, zstd, deflate
CONTENT_LENGTH 0
HTTP_COOKIE 758d35b880546542d697027a0b356f25=ab445008bfc5ff243e94d0698ee00fff
HTTP_REFERER http://www.stormystuff.com/self-storage-news/4-ways-to-prepare-for-overnight-guests
HTTP_USER_AGENT Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
HTTP_X_HTTPS 1
REDIRECT_UNIQUE_ID aeFDqb9aPrF1SHEOibWKMQABlzY
REDIRECT_SCRIPT_URL /self-storage-news/4-ways-to-prepare-for-overnight-guests
REDIRECT_SCRIPT_URI https://www.stormystuff.com/self-storage-news/4-ways-to-prepare-for-overnight-guests
REDIRECT_USER_ID 8305496
REDIRECT_HTTP_AUTHORIZATION
REDIRECT_HTTPS on
REDIRECT_SSL_TLS_SNI www.stormystuff.com
REDIRECT_HTTP2 on
REDIRECT_H2PUSH off
REDIRECT_H2_PUSH off
REDIRECT_H2_PUSHED
REDIRECT_H2_PUSHED_ON
REDIRECT_H2_STREAM_ID 1
REDIRECT_H2_STREAM_TAG 1713082-1747-1
REDIRECT_STATUS 200
UNIQUE_ID aeFDqb9aPrF1SHEOibWKMQABlzY
SCRIPT_URL /self-storage-news/4-ways-to-prepare-for-overnight-guests
SCRIPT_URI https://www.stormystuff.com/self-storage-news/4-ways-to-prepare-for-overnight-guests
USER_ID 8305496
HTTP_AUTHORIZATION
HTTPS on
SSL_TLS_SNI www.stormystuff.com
HTTP2 on
H2PUSH off
H2_PUSH off
H2_PUSHED
H2_PUSHED_ON
H2_STREAM_ID 1
H2_STREAM_TAG 1713082-1747-1
SERVER_SIGNATURE
SERVER_SOFTWARE Apache
SERVER_NAME www.stormystuff.com
SERVER_ADDR 68.178.244.145
SERVER_PORT 443
REMOTE_ADDR 216.73.216.46
REQUEST_SCHEME https
CONTEXT_PREFIX
CONTEXT_DOCUMENT_ROOT /home/r40i1v2umdct/stormystuff.com
SERVER_ADMIN webmaster@stormystuff.bristolsb.com
SCRIPT_FILENAME /home/r40i1v2umdct/stormystuff.com/index.php
REMOTE_PORT 48992
REDIRECT_URL /self-storage-news/4-ways-to-prepare-for-overnight-guests
SERVER_PROTOCOL HTTP/2.0
REQUEST_METHOD GET
QUERY_STRING option=com_k2&id=253&view=item&Itemid=269
REQUEST_URI /self-storage-news/4-ways-to-prepare-for-overnight-guests
SCRIPT_NAME /index.php
PHP_SELF /index.php
REQUEST_TIME_FLOAT 1776370601.529
REQUEST_TIME 1776370601
Key Value
LSPHP_ENABLE_USER_INI on
HTTP_HOST stormystuff.bristolsb.com
DOCUMENT_ROOT /home/r40i1v2umdct/stormystuff.com
PATH /usr/local/bin:/usr/bin:/bin
TEMP /tmp
TMP /tmp
TMPDIR /tmp
PWD /
0. Whoops\Handler\PrettyPageHandler