lib/Pico.php
public function getBaseUrl()
    {
        $baseUrl = $this->getConfig('base_url');
        if ($baseUrl) {
            return $baseUrl;
        }

        $host = 'localhost';
        if (!empty($_SERVER['HTTP_X_FORWARDED_HOST'])) {
            $host = $_SERVER['HTTP_X_FORWARDED_HOST'];
        } elseif (!empty($_SERVER['HTTP_HOST'])) {
            $host = $_SERVER['HTTP_HOST'];
        } elseif (!empty($_SERVER['SERVER_NAME'])) {
            $host = $_SERVER['SERVER_NAME'];
        }

        $port = 80;
        if (!empty($_SERVER['HTTP_X_FORWARDED_PORT'])) {
            $port = (int) $_SERVER['HTTP_X_FORWARDED_PORT'];
        } elseif (!empty($_SERVER['SERVER_PORT'])) {
            $port = (int) $_SERVER['SERVER_PORT'];
        }

        $hostPortPosition = ($host[0] === '[') ? strpos($host, ':', strrpos($host, ']') ?: 0) : strrpos($host, ':');
        if ($hostPortPosition !== false) {
            $port = (int) substr($host, $hostPortPosition + 1);
            $host = substr($host, 0, $hostPortPosition);
        }

        $protocol = 'http';
        if (!empty($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
            $secureProxyHeader = strtolower(current(explode(',', $_SERVER['HTTP_X_FORWARDED_PROTO'])));
            $protocol = in_array($secureProxyHeader, array('https', 'on', 'ssl', '1'), true) ? 'https' : 'http';
        } elseif (!empty($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] !== 'off')) {
            $protocol = 'https';
        } elseif ($port === 443) {
            $protocol = 'https';
        }

        $basePath = isset($_SERVER['SCRIPT_NAME']) ? dirname($_SERVER['SCRIPT_NAME']) : '/';
        $basePath = !in_array($basePath, array('.', '/', '\\'), true) ? $basePath . '/' : '/';

        if ((($protocol === 'http') && ($port !== 80)) || (($protocol === 'https') && ($port !== 443))) {
            $host = $host . ':' . $port;
        }

        $this->config['base_url'] = $protocol . "://" . $host . $basePath;
        return $this->config['base_url'];
    }
public function getBaseUrl()
    {
        $baseUrl = $this->getConfig('base_url');
        if ($baseUrl) {
            return $baseUrl;
        }

        $host = 'localhost';
        if (!empty($_SERVER['HTTP_X_FORWARDED_HOST'])) {
            $host = $_SERVER['HTTP_X_FORWARDED_HOST'];
        } elseif (!empty($_SERVER['HTTP_HOST'])) {
            $host = $_SERVER['HTTP_HOST'];
        } elseif (!empty($_SERVER['SERVER_NAME'])) {
            $host = $_SERVER['SERVER_NAME'];
        }

        $port = 80;
        if (!empty($_SERVER['HTTP_X_FORWARDED_PORT'])) {
            $port = (int) $_SERVER['HTTP_X_FORWARDED_PORT'];
        } elseif (!empty($_SERVER['SERVER_PORT'])) {
            $port = (int) $_SERVER['SERVER_PORT'];
        }

        $hostPortPosition = ($host[0] === '[') ? strpos($host, ':', strrpos($host, ']') ?: 0) : strrpos($host, ':');
        if ($hostPortPosition !== false) {
            $port = (int) substr($host, $hostPortPosition + 1);
            $host = substr($host, 0, $hostPortPosition);
        }

        $protocol = 'http';
        if (!empty($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
            $secureProxyHeader = strtolower(current(explode(',', $_SERVER['HTTP_X_FORWARDED_PROTO'])));
            $protocol = in_array($secureProxyHeader, array('https', 'on', 'ssl', '1'), true) ? 'https' : 'http';
        } elseif (!empty($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] !== 'off')) {
            $protocol = 'https';
        } elseif ($port === 443) {
            $protocol = 'https';
        }

        $basePath = isset($_SERVER['SCRIPT_NAME']) ? dirname($_SERVER['SCRIPT_NAME']) : '/';
        $basePath = !in_array($basePath, array('.', '/', '\\'), true) ? $basePath . '/' : '/';

        if ((($protocol === 'http') && ($port !== 80)) || (($protocol === 'https') && ($port !== 443))) {
            $host = $host . ':' . $port;
        }

        $this->config['base_url'] = $protocol . "://" . $host . $basePath;
        return $this->config['base_url'];
    }
public function getBaseUrl ( ) { $ baseUrl = $ this -> getConfig ( 'base_url' ) ; if ( $ baseUrl ) { return $ baseUrl ; } $ host = 'localhost' ; if ( ! empty ( $ _SERVER [ 'HTTP_X_FORWARDED_HOST' ] ) ) { $ host = $ _SERVER [ 'HTTP_X_FORWARDED_HOST' ] ; } elseif ( ! empty ( $ _SERVER [ 'HTTP_HOST' ] ) ) { $ host = $ _SERVER [ 'HTTP_HOST' ] ; } elseif ( ! empty ( $ _SERVER [ 'SERVER_NAME' ] ) ) { $ host = $ _SERVER [ 'SERVER_NAME' ] ; } $ port = 80 ; if ( ! empty ( $ _SERVER [ 'HTTP_X_FORWARDED_PORT' ] ) ) { $ port = ( int ) $ _SERVER [ 'HTTP_X_FORWARDED_PORT' ] ; } elseif ( ! empty ( $ _SERVER [ 'SERVER_PORT' ] ) ) { $ port = ( int ) $ _SERVER [ 'SERVER_PORT' ] ; } $ hostPortPosition = ( $ host [ 0 ] === '[' ) ? strpos ( $ host , ':' , strrpos ( $ host , ']' ) ? : 0 ) : strrpos ( $ host , ':' ) ; if ( $ hostPortPosition !== false ) { $ port = ( int ) substr ( $ host , $ hostPortPosition + 1 ) ; $ host = substr ( $ host , 0 , $ hostPortPosition ) ; } $ protocol = 'http' ; if ( ! empty ( $ _SERVER [ 'HTTP_X_FORWARDED_PROTO' ] ) ) { $ secureProxyHeader = strtolower ( current ( explode ( ',' , $ _SERVER [ 'HTTP_X_FORWARDED_PROTO' ] ) ) ) ; $ protocol = in_array ( $ secureProxyHeader , array ( 'https' , 'on' , 'ssl' , '1' ) , true ) ? 'https' : 'http' ; } elseif ( ! empty ( $ _SERVER [ 'HTTPS' ] ) && ( $ _SERVER [ 'HTTPS' ] !== 'off' ) ) { $ protocol = 'https' ; } elseif ( $ port === 443 ) { $ protocol = 'https' ; } $ basePath = isset ( $ _SERVER [ 'SCRIPT_NAME' ] ) ? dirname ( $ _SERVER [ 'SCRIPT_NAME' ] ) : '/' ; $ basePath = ! in_array ( $ basePath , array ( '.' , '/' , '\\' ) , true ) ? $ basePath . '/' : '/' ; if ( ( ( $ protocol === 'http' ) && ( $ port !== 80 ) ) || ( ( $ protocol === 'https' ) && ( $ port !== 443 ) ) ) { $ host = $ host . ':' . $ port ; } $ this -> config [ 'base_url' ] = $ protocol . "://" . $ host . $ basePath ; return $ this -> config [ 'base_url' ] ; }
Returns the base URL of this Pico instance

Security Notice: You MUST configure Pico's base URL explicitly when
using the base URL in contexts that are potentially vulnerable to
HTTP Host Header Injection attacks (e.g. when generating emails).

@return string the base url
Returns the base URL of this Pico instance