Deprecated: Return type of I::current() should either be compatible with Iterator::current(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/pourpieger/public_html/kirby/vendor/getkirby/toolkit/lib/i.php on line 62

Deprecated: Return type of I::next() should either be compatible with Iterator::next(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/pourpieger/public_html/kirby/vendor/getkirby/toolkit/lib/i.php on line 91

Deprecated: Return type of I::key() should either be compatible with Iterator::key(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/pourpieger/public_html/kirby/vendor/getkirby/toolkit/lib/i.php on line 71

Deprecated: Return type of I::valid() should either be compatible with Iterator::valid(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/pourpieger/public_html/kirby/vendor/getkirby/toolkit/lib/i.php on line 101

Deprecated: Return type of I::rewind() should either be compatible with Iterator::rewind(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/pourpieger/public_html/kirby/vendor/getkirby/toolkit/lib/i.php on line 53

Deprecated: Return type of Collection::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/pourpieger/public_html/kirby/vendor/getkirby/toolkit/lib/collection.php on line 80

Deprecated: Return type of Whoops\Exception\FrameCollection::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/pourpieger/public_html/kirby/vendor/filp/whoops/src/Whoops/Exception/FrameCollection.php on line 101

Deprecated: Return type of Whoops\Exception\FrameCollection::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/pourpieger/public_html/kirby/vendor/filp/whoops/src/Whoops/Exception/FrameCollection.php on line 110

Deprecated: Return type of Whoops\Exception\FrameCollection::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/pourpieger/public_html/kirby/vendor/filp/whoops/src/Whoops/Exception/FrameCollection.php on line 119

Deprecated: Return type of Whoops\Exception\FrameCollection::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/pourpieger/public_html/kirby/vendor/filp/whoops/src/Whoops/Exception/FrameCollection.php on line 128

Deprecated: Return type of Whoops\Exception\FrameCollection::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/pourpieger/public_html/kirby/vendor/filp/whoops/src/Whoops/Exception/FrameCollection.php on line 92

Deprecated: Whoops\Exception\FrameCollection implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in /home/pourpieger/public_html/kirby/vendor/filp/whoops/src/Whoops/Exception/FrameCollection.php on line 20

Deprecated: Return type of Whoops\Exception\FrameCollection::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/pourpieger/public_html/kirby/vendor/filp/whoops/src/Whoops/Exception/FrameCollection.php on line 137

Deprecated: Whoops\Exception\Frame implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in /home/pourpieger/public_html/kirby/vendor/filp/whoops/src/Whoops/Exception/Frame.php on line 12
Kirby CMS Debugger
Whoops \ Exception \ ErrorException (E_DEPRECATED)
trim(): Passing null to parameter #1 ($string) of type string is deprecated Whoops\Exception\ErrorException thrown with message "trim(): Passing null to parameter #1 ($string) of type string is deprecated" Stacktrace: #5 Whoops\Exception\ErrorException in /home/pourpieger/public_html/kirby/branches/multilang/site.php:167 #4 trim in /home/pourpieger/public_html/kirby/branches/multilang/site.php:167 #3 Site:visit in /home/pourpieger/public_html/kirby/kirby.php:281 #2 Kirby:{closure} in /home/pourpieger/public_html/kirby/vendor/getkirby/toolkit/helpers.php:282 #1 call in /home/pourpieger/public_html/kirby/kirby.php:733 #0 Kirby:launch in /home/pourpieger/public_html/index.php:16
Stack frames (6)
5
Whoops
\
Exception
\
ErrorException
/
branches
/
multilang
/
site.php
167
4
trim
/
branches
/
multilang
/
site.php
167
3
Site
visit
/
kirby.php
281
2
Kirby
{closure}
/
vendor
/
getkirby
/
toolkit
/
helpers.php
282
1
call
/
kirby.php
733
0
Kirby
launch
/
home
/
pourpieger
/
public_html
/
index.php
16
/
home
/
pourpieger
/
public_html
/
kirby
/
branches
/
multilang
/
site.php
 
  /**
   * Sets the currently active page
   * and returns its page object
   *
   * @param string $uri
   * @return Page
   */
  public function visit($uri = '', $lang = null) {
 
    // if the language code is missing or the code is invalid (TODO)
    if(!in_array($lang, $this->languages()->keys())) {
      $lang = $this->defaultLanguage->code;
    }
 
    // set the current language
    $this->language = $this->languages()->data[$lang];
 
    // clean the uri
    $uri = trim($uri, '/');
 
    // alternate version without file extension
    $baseUri = f::name($uri);
    $parent  = dirname($uri);
    if($parent !== '.') $baseUri = $parent . '/' . $baseUri;
 
    if(empty($uri)) {
      return $this->page = $this->homePage();
    } else {
      if($lang == $this->defaultLanguage->code and $page = $this->children()->find($uri)) {
        return $this->page = $page;
      } else if($page = $this->children()->findByURI($uri)) {
        return $this->page = $page;
      }
 
      // store the representation for $page->representation()
      if($uri !== $baseUri) $this->representation = f::extension($uri);
 
      if($baseUri === '') {
        return $this->page = $this->homePage();
/
home
/
pourpieger
/
public_html
/
kirby
/
branches
/
multilang
/
site.php
 
  /**
   * Sets the currently active page
   * and returns its page object
   *
   * @param string $uri
   * @return Page
   */
  public function visit($uri = '', $lang = null) {
 
    // if the language code is missing or the code is invalid (TODO)
    if(!in_array($lang, $this->languages()->keys())) {
      $lang = $this->defaultLanguage->code;
    }
 
    // set the current language
    $this->language = $this->languages()->data[$lang];
 
    // clean the uri
    $uri = trim($uri, '/');
 
    // alternate version without file extension
    $baseUri = f::name($uri);
    $parent  = dirname($uri);
    if($parent !== '.') $baseUri = $parent . '/' . $baseUri;
 
    if(empty($uri)) {
      return $this->page = $this->homePage();
    } else {
      if($lang == $this->defaultLanguage->code and $page = $this->children()->find($uri)) {
        return $this->page = $page;
      } else if($page = $this->children()->findByURI($uri)) {
        return $this->page = $page;
      }
 
      // store the representation for $page->representation()
      if($uri !== $baseUri) $this->representation = f::extension($uri);
 
      if($baseUri === '') {
        return $this->page = $this->homePage();
/
home
/
pourpieger
/
public_html
/
kirby
/
kirby.php
          $language = $site->detectedLanguage();
        }
 
        // build language homepage URL including params and/or query
        $url = $language->url();
        if($params = url::params()) $url .= '/' . url::paramsToString($params);
        if($query  = url::query())  $url .= '/?' . url::queryToString($query);
 
        // redirect to the language homepage
        if($language && rtrim(url::current(), '/') !== rtrim($url, '/')) {
          return go($url);
        }
 
      }
 
      // get the language code from the route
      $lang = ($kirby->route->lang)? $kirby->route->lang->code() : false;
 
      // visit the currently active page
      $page = ($lang)? $site->visit($path, $lang) : $site->visit($path);
 
      // redirections for files and invalid representations
      if($site->representation !== null) {
 
        // get the filename
        $filename = rawurldecode(basename($path));
        $pagepath = dirname($path);
 
        // check if there's a page for the parent path
        if($parent = $site->find($pagepath)) {
          // check if there's a file for the last element of the path
          if($file = $parent->file($filename)) {
            return go($file->url());
          }
        }
 
        // prevent invalid representation routes
        if($site->representation === '' || $site->representation != $page->representation()) {
          return $site->errorPage();
        }
/
home
/
pourpieger
/
public_html
/
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);
/
home
/
pourpieger
/
public_html
/
kirby
/
kirby.php
 
    // load all plugins
    $this->plugins();
 
    // start the router
    $this->router = new Router($this->routes());
    $this->route  = $this->router->run(trim($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;
 
/
home
/
pourpieger
/
public_html
/
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.8
Kirby CMS v2.5.8
empty
empty
empty
empty
empty
Key Value
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_HOST www.pourquoipieger.com
HTTP_USER_AGENT Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
REDIRECT_UNIQUE_ID ZxcbO0ifKh4ObacEwSFSUwAAAEs
REDIRECT_SCRIPT_URL /en
REDIRECT_SCRIPT_URI http://www.pourquoipieger.com/en
REDIRECT_STATUS 200
UNIQUE_ID ZxcbO0ifKh4ObacEwSFSUwAAAEs
SCRIPT_URL /en
SCRIPT_URI http://www.pourquoipieger.com/en
SERVER_SIGNATURE
SERVER_SOFTWARE Apache
SERVER_NAME www.pourquoipieger.com
SERVER_ADDR 173.209.61.117
SERVER_PORT 80
REMOTE_ADDR 3.138.102.181
DOCUMENT_ROOT /home/pourpieger/public_html
REQUEST_SCHEME http
CONTEXT_PREFIX
CONTEXT_DOCUMENT_ROOT /home/pourpieger/public_html
SERVER_ADMIN webmaster@pourquoipieger.com
SCRIPT_FILENAME /home/pourpieger/public_html/index.php
REMOTE_PORT 29231
REDIRECT_URL /en
SERVER_PROTOCOL HTTP/1.1
REQUEST_METHOD GET
QUERY_STRING
REQUEST_URI /en
SCRIPT_NAME /index.php
PHP_SELF /index.php
REQUEST_TIME_FLOAT 1729567547.5956
REQUEST_TIME 1729567547
argv Array ( )
argc 0
empty
0. Whoops\Handler\PrettyPageHandler