Whoops \ Exception \ ErrorException (E_WARNING)
Cannot modify header information - headers already sent by (output started at /usr/www/users/gmurgi/kirby/site/tags/box.php:19) Whoops\Exception\ErrorException thrown with message "Cannot modify header information - headers already sent by (output started at /usr/www/users/gmurgi/kirby/site/tags/box.php:19)" Stacktrace: #6 Whoops\Exception\ErrorException in /usr/www/users/gmurgi/kirby/kirby/vendor/getkirby/toolkit/lib/header.php:251 #5 header in /usr/www/users/gmurgi/kirby/kirby/vendor/getkirby/toolkit/lib/header.php:251 #4 Header:redirect in /usr/www/users/gmurgi/kirby/kirby/vendor/getkirby/toolkit/lib/redirect.php:25 #3 Redirect:send in /usr/www/users/gmurgi/kirby/kirby/kirby.php:314 #2 Kirby:{closure} in /usr/www/users/gmurgi/kirby/kirby/vendor/getkirby/toolkit/helpers.php:280 #1 call in /usr/www/users/gmurgi/kirby/kirby/kirby.php:718 #0 Kirby:launch in /usr/www/users/gmurgi/kirby/index.php:16
Stack frames (7)
6
Whoops
\
Exception
\
ErrorException
/
vendor
/
getkirby
/
toolkit
/
lib
/
header.php
251
5
header
/
vendor
/
getkirby
/
toolkit
/
lib
/
header.php
251
4
Header
redirect
/
vendor
/
getkirby
/
toolkit
/
lib
/
redirect.php
25
3
Redirect
send
/
kirby.php
314
2
Kirby
{closure}
/
vendor
/
getkirby
/
toolkit
/
helpers.php
280
1
call
/
kirby.php
718
0
Kirby
launch
/
usr
/
www
/
users
/
gmurgi
/
kirby
/
index.php
16
/
usr
/
www
/
users
/
gmurgi
/
kirby
/
kirby
/
vendor
/
getkirby
/
toolkit
/
lib
/
header.php
  public static function unavailable($send = true) {
    return static::status(503, $send);
  }
 
  /**
   * Sends a redirect header
   * 
   * @param boolean $send
   * @return string|null
   */
  public static function redirect($url, $code = 301, $send = true) {
 
    $status   = static::status($code, false); 
    $location = 'Location:' . $url;
 
    if(!$send) {
      return $status . "\r\n" . $location;
    }
 
    header($status);
    header($location);
    exit();
 
  }
 
  /**
   * Sends download headers for anything that is downloadable 
   * 
   * @param array $params Check out the defaults array for available parameters
   */
   public static function download($params = array()) {
 
    $defaults = array(
      'name'     => 'download',
      'size'     => false,
      'mime'     => 'application/force-download',
      'modified' => time()
    );
 
    $options = array_merge($defaults, $params);
/
usr
/
www
/
users
/
gmurgi
/
kirby
/
kirby
/
vendor
/
getkirby
/
toolkit
/
lib
/
header.php
  public static function unavailable($send = true) {
    return static::status(503, $send);
  }
 
  /**
   * Sends a redirect header
   * 
   * @param boolean $send
   * @return string|null
   */
  public static function redirect($url, $code = 301, $send = true) {
 
    $status   = static::status($code, false); 
    $location = 'Location:' . $url;
 
    if(!$send) {
      return $status . "\r\n" . $location;
    }
 
    header($status);
    header($location);
    exit();
 
  }
 
  /**
   * Sends download headers for anything that is downloadable 
   * 
   * @param array $params Check out the defaults array for available parameters
   */
   public static function download($params = array()) {
 
    $defaults = array(
      'name'     => 'download',
      'size'     => false,
      'mime'     => 'application/force-download',
      'modified' => time()
    );
 
    $options = array_merge($defaults, $params);
/
usr
/
www
/
users
/
gmurgi
/
kirby
/
kirby
/
vendor
/
getkirby
/
toolkit
/
lib
/
redirect.php
 * Helps redirecting to various places in your app
 * Combined with custom handlers of URL::to, this can be really smart and handy
 * 
 * @package   Kirby Toolkit 
 * @author    Bastian Allgeier <bastian@getkirby.com>
 * @link      http://getkirby.com
 * @copyright Bastian Allgeier
 * @license   http://www.opensource.org/licenses/mit-license.php MIT License
 */
class Redirect {
 
  /**
   * Redirects the user to a new URL
   *
   * @param   string    $url The URL to redirect to
   * @param   boolean   $code The HTTP status code, which should be sent (301, 302 or 303)
   * @param   boolean   $send If true, headers will be sent and redirection will take effect
   */
  public static function send($url = false, $code = false, $send = true) {
    return header::redirect($url, $code, $send);
  }
 
  /**
   * Redirects to a specific URL. You can pass either a normal URI
   * a controller path or simply nothing (which redirects home)
   * You can also pass a second param with the HTTP status code
   */
  public static function to() {
    $args = func_get_args();
 
    // if the last element is a number, use it as HTTP status code
    $code = false;
    if(is_int(end($args))) {
      $code = array_pop($args);
    }
 
    return static::send(call_user_func_array(array('url', 'to'), $args), $code);
  }
 
  /**
/
usr
/
www
/
users
/
gmurgi
/
kirby
/
kirby
/
kirby.php
 
      }
 
      return $page;
 
    };
 
    // tinyurl handling
    $routes['tinyurl'] = $this->component('tinyurl')->route();
 
    // home redirect
    $routes['homeRedirect'] = array(
      'pattern' => $this->options['home'] . '(\..*)?',
      'action'  => function($extension = null) {
        // ignore invalid extensions
        if($extension === '.') $extension = '';
 
        redirect::send(url::build([
          'fragments' => ($extension)? [$extension] : null
        ]), 307);
      }
    );
 
    // plugin assets
    $routes['pluginAssets'] = array(
      'pattern' => 'assets/plugins/(:any)/(:all)',
      'method'  => 'GET',
      'action'  => function($plugin, $path) use($kirby) {
        $root = $kirby->roots()->plugins() . DS . $plugin . DS . 'assets' . DS . $path;
        $file = new Media($root);
 
        if($file->exists()) {
          return new Response(f::read($root), f::extension($root));
        } else {          
          return new Response('The file could not be found', f::extension($path), 404);
        }
      }
    );
 
    // all other urls
/
usr
/
www
/
users
/
gmurgi
/
kirby
/
kirby
/
vendor
/
getkirby
/
toolkit
/
helpers.php
 
/**
 * Facepalm typo alias
 * @see csrf()
 */
function csfr() {
  return call('csrf', func_get_args());
}
 
/**
 * Shortcut for call_user_func_array with a better handling of arguments
 *
 * @param mixed $function
 * @param mixed $arguments
 * @return mixed
 */
function call($function, $arguments = array()) {
  if(!is_callable($function)) return false;
  if(!is_array($arguments)) $arguments = array($arguments);
  return call_user_func_array($function, $arguments);
}
 
/**
 * Parses yaml structured text
 *
 * @param $string
 * @return array
 */
function yaml($string) {
  return yaml::decode($string);
}
 
/**
 * Simple email sender helper
 *
 * @param array $params
 * @return Email
 */
function email($params = array()) {
  return new Email($params);
/
usr
/
www
/
users
/
gmurgi
/
kirby
/
kirby
/
kirby.php
 
    // load all plugins
    $this->plugins();
 
    // start the router
    $this->router = new Router($this->routes());
    $this->route  = $this->router->run($this->path());
 
    // check for a valid route
    if(is_null($this->route)) {
      header::status('500');
      header::type('json');
      die(json_encode(array(
        'status'  => 'error',
        'message' => 'Invalid route or request method'
      )));
    }
 
    // call the router action with all arguments from the pattern
    $response = call($this->route->action(), $this->route->arguments());
 
    // load all language variables
    // this can only be loaded once the router action has been called
    // otherwise the current language is not yet available
    $this->localize();
 
    // build the response
    $this->response = $this->component('response')->make($response);
 
    // store the current language in the session
    if(
        $this->option('language.detect') &&
        $this->site()->multilang() && 
        $this->site()->language()
      ) {      
      s::set('kirby_language', $this->site()->language()->code());
    }
 
    return $this->response;
 
/
usr
/
www
/
users
/
gmurgi
/
kirby
/
index.php
<?php
 
define('DS', DIRECTORY_SEPARATOR);
 
// load kirby
require(__DIR__ . DS . 'kirby' . DS . 'bootstrap.php');
 
// check for a custom site.php
if(file_exists(__DIR__ . DS . 'site.php')) {
  require(__DIR__ . DS . 'site.php');
} else {
  $kirby = kirby();
}
 
// render
echo $kirby->launch();

Environment & details:

Key Value
Kirby Toolkit v2.5.2
Kirby CMS v2.5.2
empty
empty
empty
empty
Key Value
kirby_session_fingerprint 4cf9fc1b8275a1968580bf5a72441f2885b4c3c4
kirby_session_activity 1715198614
device_class desktop
Key Value
MAGICK_TEMPORARY_PATH /usr/home/gmurgi/.tmp
TMPDIR /usr/home/gmurgi/.tmp
PHP_FCGI_MAX_REQUESTS 100000
PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PHPRC /home/httpd/php73-ini/gmurgi
PWD /home/httpd/cgi-bin
MAGICK_TMPDIR /usr/home/gmurgi/.tmp
CONTENT_LENGTH 0
HTTP_CONNECTION close
SCRIPT_NAME /index.php
REQUEST_URI /home/
QUERY_STRING
REQUEST_METHOD GET
SERVER_PROTOCOL HTTP/2.0
GATEWAY_INTERFACE CGI/1.1
REDIRECT_URL /home/
REMOTE_PORT 54836
SCRIPT_FILENAME /usr/www/users/gmurgi/kirby/index.php
SERVER_ADMIN webmaster@hauskredite.de
CONTEXT_DOCUMENT_ROOT /usr/www/users/gmurgi/kirby
CONTEXT_PREFIX
REQUEST_SCHEME https
DOCUMENT_ROOT /usr/www/users/gmurgi/kirby
REMOTE_ADDR 18.220.178.207
SERVER_PORT 443
SERVER_ADDR 78.47.73.210
SERVER_NAME www.hauskredite.de
SERVER_SOFTWARE Apache
SERVER_SIGNATURE
HTTP_HOST www.hauskredite.de
HTTP_USER_AGENT Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
HTTP_ACCEPT */*
SSL_TLS_SNI www.hauskredite.de
HTTPS on
H2_STREAM_TAG 27691-2516-1
H2_STREAM_ID 1
H2_PUSHED_ON
H2_PUSHED
H2_PUSH off
H2PUSH off
HTTP2 on
REDIRECT_STATUS 200
REDIRECT_SSL_TLS_SNI www.hauskredite.de
REDIRECT_HTTPS on
REDIRECT_H2_STREAM_TAG 27691-2516-1
REDIRECT_H2_STREAM_ID 1
REDIRECT_H2_PUSHED_ON
REDIRECT_H2_PUSHED
REDIRECT_H2_PUSH off
REDIRECT_H2PUSH off
REDIRECT_HTTP2 on
FCGI_ROLE RESPONDER
PHP_SELF /index.php
REQUEST_TIME_FLOAT 1715198614.9446
REQUEST_TIME 1715198614
argv Array ( )
argc 0
Key Value
MAGICK_TEMPORARY_PATH /usr/home/gmurgi/.tmp
TMPDIR /usr/home/gmurgi/.tmp
PHP_FCGI_MAX_REQUESTS 100000
PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PHPRC /home/httpd/php73-ini/gmurgi
PWD /home/httpd/cgi-bin
MAGICK_TMPDIR /usr/home/gmurgi/.tmp
CONTENT_LENGTH 0
HTTP_CONNECTION close
SCRIPT_NAME /index.php
REQUEST_URI /home/
QUERY_STRING
REQUEST_METHOD GET
SERVER_PROTOCOL HTTP/2.0
GATEWAY_INTERFACE CGI/1.1
REDIRECT_URL /home/
REMOTE_PORT 54836
SCRIPT_FILENAME /usr/www/users/gmurgi/kirby/index.php
SERVER_ADMIN webmaster@hauskredite.de
CONTEXT_DOCUMENT_ROOT /usr/www/users/gmurgi/kirby
CONTEXT_PREFIX
REQUEST_SCHEME https
DOCUMENT_ROOT /usr/www/users/gmurgi/kirby
REMOTE_ADDR 18.220.178.207
SERVER_PORT 443
SERVER_ADDR 78.47.73.210
SERVER_NAME www.hauskredite.de
SERVER_SOFTWARE Apache
SERVER_SIGNATURE
HTTP_HOST www.hauskredite.de
HTTP_USER_AGENT Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
HTTP_ACCEPT */*
SSL_TLS_SNI www.hauskredite.de
HTTPS on
H2_STREAM_TAG 27691-2516-1
H2_STREAM_ID 1
H2_PUSHED_ON
H2_PUSHED
H2_PUSH off
H2PUSH off
HTTP2 on
REDIRECT_STATUS 200
REDIRECT_SSL_TLS_SNI www.hauskredite.de
REDIRECT_HTTPS on
REDIRECT_H2_STREAM_TAG 27691-2516-1
REDIRECT_H2_STREAM_ID 1
REDIRECT_H2_PUSHED_ON
REDIRECT_H2_PUSHED
REDIRECT_H2_PUSH off
REDIRECT_H2PUSH off
REDIRECT_HTTP2 on
FCGI_ROLE RESPONDER
0. Whoops\Handler\PrettyPageHandler