Twig \ Error \ RuntimeError
Impossible to access an attribute ("MainContent") on a null variable. Twig\Error\RuntimeError thrown with message "Impossible to access an attribute ("MainContent") on a null variable." Stacktrace: #19 Twig\Error\RuntimeError in /var/www/technexus/views/blog/post.twig:5 #18 twig_get_attribute in /var/www/technexus/vendor/twig/twig/src/Environment.php:358 #17 __TwigTemplate_421076e2f060f410847484b439258ba4b9ca3f85ef6488f828bca6ba51772777:block_description in /var/www/technexus/vendor/twig/twig/src/Template.php:173 #16 Twig\Template:displayBlock in /var/www/technexus/vendor/twig/twig/src/Environment.php:358 #15 __TwigTemplate_840bf8cec5f076a23a8c62af4caa7a12c4ad39029b6ca75026fc199f75eb89e5:doDisplay in /var/www/technexus/vendor/twig/twig/src/Template.php:396 #14 Twig\Template:displayWithErrorHandling in /var/www/technexus/vendor/twig/twig/src/Template.php:369 #13 Twig\Template:display in /var/www/technexus/vendor/twig/twig/src/Environment.php:358 #12 __TwigTemplate_421076e2f060f410847484b439258ba4b9ca3f85ef6488f828bca6ba51772777:doDisplay in /var/www/technexus/vendor/twig/twig/src/Template.php:396 #11 Twig\Template:displayWithErrorHandling in /var/www/technexus/vendor/twig/twig/src/Template.php:369 #10 Twig\Template:display in /var/www/technexus/vendor/twig/twig/src/Template.php:381 #9 Twig\Template:render in /var/www/technexus/vendor/twig/twig/src/TemplateWrapper.php:40 #8 Twig\TemplateWrapper:render in /var/www/technexus/vendor/twig/twig/src/Environment.php:277 #7 Twig\Environment:render in /var/www/divergence/src/Responders/TwigBuilder.php:27 #6 Divergence\Responders\TwigBuilder:getBody in /var/www/divergence/src/Responders/Response.php:101 #5 Divergence\Responders\Response:__construct in /var/www/technexus/src/Controllers/Blog.php:264 #4 technexus\Controllers\Blog:post in /var/www/technexus/src/Controllers/Blog.php:84 #3 technexus\Controllers\Blog:handle in /var/www/technexus/src/Controllers/Main.php:47 #2 technexus\Controllers\Main:handle in /var/www/technexus/src/App.php:122 #1 technexus\App:handleRequest in /var/www/technexus/bootstrap/router.php:10 #0 require in /var/www/technexus/public/index.php:4
Stack frames (20)
19
Twig\Error\RuntimeError
/views/blog/post.twig5
18
twig_get_attribute
/vendor/twig/twig/src/Environment.php358
17
__TwigTemplate_421076e2f060f410847484b439258ba4b9ca3f85ef6488f828bca6ba51772777 block_description
/vendor/twig/twig/src/Template.php173
16
Twig\Template displayBlock
/vendor/twig/twig/src/Environment.php358
15
__TwigTemplate_840bf8cec5f076a23a8c62af4caa7a12c4ad39029b6ca75026fc199f75eb89e5 doDisplay
/vendor/twig/twig/src/Template.php396
14
Twig\Template displayWithErrorHandling
/vendor/twig/twig/src/Template.php369
13
Twig\Template display
/vendor/twig/twig/src/Environment.php358
12
__TwigTemplate_421076e2f060f410847484b439258ba4b9ca3f85ef6488f828bca6ba51772777 doDisplay
/vendor/twig/twig/src/Template.php396
11
Twig\Template displayWithErrorHandling
/vendor/twig/twig/src/Template.php369
10
Twig\Template display
/vendor/twig/twig/src/Template.php381
9
Twig\Template render
/vendor/twig/twig/src/TemplateWrapper.php40
8
Twig\TemplateWrapper render
/vendor/twig/twig/src/Environment.php277
7
Twig\Environment render
/var/www/divergence/src/Responders/TwigBuilder.php27
6
Divergence\Responders\TwigBuilder getBody
/var/www/divergence/src/Responders/Response.php101
5
Divergence\Responders\Response __construct
/src/Controllers/Blog.php264
4
technexus\Controllers\Blog post
/src/Controllers/Blog.php84
3
technexus\Controllers\Blog handle
/src/Controllers/Main.php47
2
technexus\Controllers\Main handle
/src/App.php122
1
technexus\App handleRequest
/bootstrap/router.php10
0
require
/public/index.php4
/var/www/technexus/views/blog/post.twig
{% extends "blog/layouts/design.twig" %}
 
{% block title %}{{BlogPost.Title}} | {{ parent() }}{% endblock %}
 
{% block description %}{{ BlogPost.MainContent | replace({'\n':" ",'\t':" "}) | striptags | trim | slice(0,255) }}{% endblock %}
 
{% block meta %}
<meta property="og:title" content="{{ BlogPost.Title }}" />
<meta property="og:type" content="article" />
<meta property="og:url" content="{{ BlogPost.ExternalPermaLink }}" />
<meta property="og:image" content="{{ BlogPost.ShareImage}}" />
<meta content='article' property='og:type'/>
 
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@0xAkuKun">
<meta name="twitter:creator" content="@0xAkuKun">
<meta name="twitter:title" content="{{ BlogPost.Title }}">
<meta name="twitter:description" content="{{ BlogPost.MainContent | replace({'\n':" ",'\t':" "}) | striptags | trim | slice(0,255) }}">
<meta name="twitter:image" content="{{ BlogPost.ShareImage}} ">
{% endblock %}
 
{% block content %}
    {% include 'blog/templates/post.twig' %}
{% endblock %}
Arguments
  1. "Impossible to access an attribute ("MainContent") on a null variable."
    
/var/www/technexus/vendor/twig/twig/src/Environment.php
            $key = $this->cache->generateKey($name, $mainCls);
 
            if (!$this->isAutoReload() || $this->isTemplateFresh($name, $this->cache->getTimestamp($key))) {
                $this->cache->load($key);
            }
 
            $source = null;
            if (!class_exists($cls, false)) {
                $source = $this->getLoader()->getSourceContext($name);
                $content = $this->compileSource($source);
                $this->cache->write($key, $content);
                $this->cache->load($key);
 
                if (!class_exists($mainCls, false)) {
                    /* Last line of defense if either $this->bcWriteCacheFile was used,
                     * $this->cache is implemented as a no-op or we have a race condition
                     * where the cache was cleared between the above calls to write to and load from
                     * the cache.
                     */
                    eval('?>'.$content);
                }
 
                if (!class_exists($cls, false)) {
                    throw new RuntimeError(sprintf('Failed to load Twig template "%s", index "%s": cache might be corrupted.', $name, $index), -1, $source);
                }
            }
        }
 
        $this->extensionSet->initRuntime();
 
        return $this->loadedTemplates[$cls] = new $cls($this);
    }
 
    /**
     * Creates a template from source.
     *
     * This method should not be used as a generic way to load templates.
     *
     * @param string $template The template source
     * @param string $name     An optional name of the template to be used in error messages
/var/www/technexus/vendor/twig/twig/src/Template.php
    {
        if ($useBlocks && isset($blocks[$name])) {
            $template = $blocks[$name][0];
            $block = $blocks[$name][1];
        } elseif (isset($this->blocks[$name])) {
            $template = $this->blocks[$name][0];
            $block = $this->blocks[$name][1];
        } else {
            $template = null;
            $block = null;
        }
 
        // avoid RCEs when sandbox is enabled
        if (null !== $template && !$template instanceof self) {
            throw new \LogicException('A block must be a method on a \Twig\Template instance.');
        }
 
        if (null !== $template) {
            try {
                $template->$block($context, $blocks);
            } catch (Error $e) {
                if (!$e->getSourceContext()) {
                    $e->setSourceContext($template->getSourceContext());
                }
 
                // this is mostly useful for \Twig\Error\LoaderError exceptions
                // see \Twig\Error\LoaderError
                if (-1 === $e->getTemplateLine()) {
                    $e->guess();
                }
 
                throw $e;
            } catch (\Exception $e) {
                $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $template->getSourceContext(), $e);
                $e->guess();
 
                throw $e;
            }
        } elseif (false !== $parent = $this->getParent($context)) {
            $parent->displayBlock($name, $context, array_merge($this->blocks, $blocks), false, $templateContext ?? $this);
/var/www/technexus/vendor/twig/twig/src/Environment.php
            $key = $this->cache->generateKey($name, $mainCls);
 
            if (!$this->isAutoReload() || $this->isTemplateFresh($name, $this->cache->getTimestamp($key))) {
                $this->cache->load($key);
            }
 
            $source = null;
            if (!class_exists($cls, false)) {
                $source = $this->getLoader()->getSourceContext($name);
                $content = $this->compileSource($source);
                $this->cache->write($key, $content);
                $this->cache->load($key);
 
                if (!class_exists($mainCls, false)) {
                    /* Last line of defense if either $this->bcWriteCacheFile was used,
                     * $this->cache is implemented as a no-op or we have a race condition
                     * where the cache was cleared between the above calls to write to and load from
                     * the cache.
                     */
                    eval('?>'.$content);
                }
 
                if (!class_exists($cls, false)) {
                    throw new RuntimeError(sprintf('Failed to load Twig template "%s", index "%s": cache might be corrupted.', $name, $index), -1, $source);
                }
            }
        }
 
        $this->extensionSet->initRuntime();
 
        return $this->loadedTemplates[$cls] = new $cls($this);
    }
 
    /**
     * Creates a template from source.
     *
     * This method should not be used as a generic way to load templates.
     *
     * @param string $template The template source
     * @param string $name     An optional name of the template to be used in error messages
/var/www/technexus/vendor/twig/twig/src/Template.php
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
            $this->doDisplay($context, $blocks);
        } catch (Error $e) {
            if (!$e->getSourceContext()) {
                $e->setSourceContext($this->getSourceContext());
            }
 
            // this is mostly useful for \Twig\Error\LoaderError exceptions
            // see \Twig\Error\LoaderError
            if (-1 === $e->getTemplateLine()) {
                $e->guess();
            }
 
            throw $e;
        } catch (\Exception $e) {
            $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getSourceContext(), $e);
            $e->guess();
 
            throw $e;
        }
    }
 
/var/www/technexus/vendor/twig/twig/src/Template.php
    {
        return $this;
    }
 
    /**
     * Returns all blocks.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @return array An array of blocks
     */
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        if ($this->env->isDebug()) {
            ob_start();
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
/var/www/technexus/vendor/twig/twig/src/Environment.php
            $key = $this->cache->generateKey($name, $mainCls);
 
            if (!$this->isAutoReload() || $this->isTemplateFresh($name, $this->cache->getTimestamp($key))) {
                $this->cache->load($key);
            }
 
            $source = null;
            if (!class_exists($cls, false)) {
                $source = $this->getLoader()->getSourceContext($name);
                $content = $this->compileSource($source);
                $this->cache->write($key, $content);
                $this->cache->load($key);
 
                if (!class_exists($mainCls, false)) {
                    /* Last line of defense if either $this->bcWriteCacheFile was used,
                     * $this->cache is implemented as a no-op or we have a race condition
                     * where the cache was cleared between the above calls to write to and load from
                     * the cache.
                     */
                    eval('?>'.$content);
                }
 
                if (!class_exists($cls, false)) {
                    throw new RuntimeError(sprintf('Failed to load Twig template "%s", index "%s": cache might be corrupted.', $name, $index), -1, $source);
                }
            }
        }
 
        $this->extensionSet->initRuntime();
 
        return $this->loadedTemplates[$cls] = new $cls($this);
    }
 
    /**
     * Creates a template from source.
     *
     * This method should not be used as a generic way to load templates.
     *
     * @param string $template The template source
     * @param string $name     An optional name of the template to be used in error messages
/var/www/technexus/vendor/twig/twig/src/Template.php
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
            $this->doDisplay($context, $blocks);
        } catch (Error $e) {
            if (!$e->getSourceContext()) {
                $e->setSourceContext($this->getSourceContext());
            }
 
            // this is mostly useful for \Twig\Error\LoaderError exceptions
            // see \Twig\Error\LoaderError
            if (-1 === $e->getTemplateLine()) {
                $e->guess();
            }
 
            throw $e;
        } catch (\Exception $e) {
            $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getSourceContext(), $e);
            $e->guess();
 
            throw $e;
        }
    }
 
/var/www/technexus/vendor/twig/twig/src/Template.php
    {
        return $this;
    }
 
    /**
     * Returns all blocks.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @return array An array of blocks
     */
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        if ($this->env->isDebug()) {
            ob_start();
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
/var/www/technexus/vendor/twig/twig/src/Template.php
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        if ($this->env->isDebug()) {
            ob_start();
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
            $this->doDisplay($context, $blocks);
        } catch (Error $e) {
            if (!$e->getSourceContext()) {
                $e->setSourceContext($this->getSourceContext());
            }
 
/var/www/technexus/vendor/twig/twig/src/TemplateWrapper.php
    private $env;
    private $template;
 
    /**
     * This method is for internal use only and should never be called
     * directly (use Twig\Environment::load() instead).
     *
     * @internal
     */
    public function __construct(Environment $env, Template $template)
    {
        $this->env = $env;
        $this->template = $template;
    }
 
    public function render(array $context = []): string
    {
        // using func_get_args() allows to not expose the blocks argument
        // as it should only be used by internal code
        return $this->template->render($context, \func_get_args()[1] ?? []);
    }
 
    public function display(array $context = [])
    {
        // using func_get_args() allows to not expose the blocks argument
        // as it should only be used by internal code
        $this->template->display($context, \func_get_args()[1] ?? []);
    }
 
    public function hasBlock(string $name, array $context = []): bool
    {
        return $this->template->hasBlock($name, $context);
    }
 
    /**
     * @return string[] An array of defined template block names
     */
    public function getBlockNames(array $context = []): array
    {
        return $this->template->getBlockNames($context);
/var/www/technexus/vendor/twig/twig/src/Environment.php
     */
    public function getTemplateClass(string $name, int $index = null): string
    {
        $key = $this->getLoader()->getCacheKey($name).$this->optionsHash;
 
        return $this->templateClassPrefix.hash('sha256', $key).(null === $index ? '' : '___'.$index);
    }
 
    /**
     * Renders a template.
     *
     * @param string|TemplateWrapper $name The template name
     *
     * @throws LoaderError  When the template cannot be found
     * @throws SyntaxError  When an error occurred during compilation
     * @throws RuntimeError When an error occurred during rendering
     */
    public function render($name, array $context = []): string
    {
        return $this->load($name)->render($context);
    }
 
    /**
     * Displays a template.
     *
     * @param string|TemplateWrapper $name The template name
     *
     * @throws LoaderError  When the template cannot be found
     * @throws SyntaxError  When an error occurred during compilation
     * @throws RuntimeError When an error occurred during rendering
     */
    public function display($name, array $context = []): void
    {
        $this->load($name)->display($context);
    }
 
    /**
     * Loads a template.
     *
     * @param string|TemplateWrapper $name The template name
/var/www/divergence/src/Responders/TwigBuilder.php
 * file that was distributed with this source code.
 */
namespace Divergence\Responders;
 
use Divergence\App;
use Twig\Environment;
use Twig\Loader\FilesystemLoader;
use Psr\Http\Message\StreamInterface;
use Twig\Extension\StringLoaderExtension;
 
class TwigBuilder extends ResponseBuilder
{
    protected string $contentType = 'text/html; charset=utf-8';
 
    public function getBody(): StreamInterface
    {
        $loader = new FilesystemLoader([App::$App->ApplicationPath.'/views']);
        $env = new Environment($loader, ['strict_variables' => true]);
        $env->addExtension(new StringLoaderExtension());
        $output = $env->render($this->template, $this->data);
        return \GuzzleHttp\Psr7\stream_for($output);
    }
}
 
/var/www/divergence/src/Responders/Response.php
        505 => 'HTTP Version not supported',
        506 => 'Variant Also Negotiates',
        507 => 'Insufficient Storage',
        508 => 'Loop Detected',
        510 => 'Not Extended',
        511 => 'Network Authentication Required',
    ];
 
    /** @var string */
    private $reasonPhrase;
 
    /** @var int */
    private $statusCode;
 
    public function __construct(ResponseBuilder $responseBuilder)
    {
        $this
        ->withDefaults(200, [
            'Content-Type' => $responseBuilder->getContentType(),
        ], $responseBuilder->getBody());
    }
 
    /**
     * @param int                                  $status  Status code
     * @param array<string, string|string[]>       $headers Response headers
     * @param string|resource|StreamInterface|null $body    Response body
     * @param string                               $version Protocol version
     * @param string|null                          $reason  Reason phrase (when empty a default will be used based on the status code)
     * @return static
     */
    public function withDefaults(
        int $status = 200,
        array $headers = [],
        $body = null,
        string $version = '1.1',
        string $reason = null
    ) {
        $this->assertStatusCodeRange($status);
 
        $this->statusCode = $status;
/var/www/technexus/src/Controllers/Blog.php
     * @param string $month
     * @param string $permalink
     * @link project://views/blog/post.twig
     * @link project://views/templates/post.twig
     * @return void
     */
    public function post($year, $month, $permalink)
    {
        $BlogPost = BlogPost::getByWhere(array_merge($this->conditions(), [
            sprintf('YEAR(`Created`)=%d', $year),
            sprintf('MONTH(`Created`)=%d', $month),
            "`permalink`='".DB::escape($permalink)."'",
        ]));
        
        return new Response(new TwigBuilder('blog/post.twig', [
            'BlogPost' => $BlogPost,
            'isLoggedIn' => App::$App->is_loggedin(),
            'Sidebar' => $this->getSidebarData(),
            'Limit' => static::LIMIT,
            'Total' => DB::foundRows(),
        ]));
    }
    
    /**
     * Displays blog posts by tag.
     *
     * @link project://views/blog/post.twig
     * @link project://views/templates/post.twig
     * @return void
     */
    public function topics()
    {
        if ($this->peekPath()) {
            if (App::$App->is_loggedin()) {
                $where = "`Status` IN ('Draft','Published')";
            } else {
                $where = "`Status` IN ('Published')";
            }
            if ($Tag = \technexus\Models\Tag::getByField('Slug', urldecode($this->shiftPath()))) {
                $BlogPosts = BlogPost::getAllByQuery(
/var/www/technexus/src/Controllers/Blog.php
                    $year = $action;
                }
                // month of posts
                if (ctype_digit($this->peekPath()) && strlen($this->peekPath()) == 2) {
                    $month = $this->shiftPath();
                }
                // single post
                if ($this->peekPath()) {
                    $permalink = $this->shiftPath();
                }
                
                if (!$permalink && !$month) {
                    return $this->year($year);
                }
                
                if (!$permalink) {
                    return $this->month($year, $month);
                }
                
                return $this->post($year, $month, $permalink);
                
            default:
                $error = new Errors();
                return $error->handlePageNotFound($request, [
                    'Sidebar' => $this->getSidebarData()
                ]);
        }
    }
 
    /**
     * Gets stuff that goes into the sidebar. All Months with blog posts and tags ordered by the amount of times that tag was used.
     *
     * @link project://views/blog/sidebar.twig
     * @return array
     */
    public function getSidebarData()
    {
        return [
            'Months' => DB::AllRecords(sprintf('SELECT DISTINCT MONTHNAME(`Created`) as `MonthName`,MONTH(`Created`) as `Month`, YEAR(`Created`) as `Year` FROM `%s` ORDER BY `Created` DESC', BlogPost::$tableName)),
            'Tags' => PostTags::getAllbyQuery('SELECT *,COUNT(*) as `Count` FROM `'.PostTags::$tableName.'` GROUP BY `TagID` ORDER BY `Count` DESC'),
/var/www/technexus/src/Controllers/Main.php
     * @uses Blog::handleRequest()
     * @return void
     */
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        if (file_exists($_SERVER['DOCUMENT_ROOT'].'/site.LOCK')) {
            echo file_get_contents($_SERVER['DOCUMENT_ROOT'].'/down.html');
            exit;
        }
 
        /*
         * This is to make sure any page that loads
         * through Apache's ErrorDocument returns 200
         * instead of 404.
         */
        header('HTTP/1.0 200 OK');
        //header('X-Powered-By: PHP/' . phpversion() . ' Div Framework (http://emr.ge) Henry\'s Revision');
 
        $blog = new Blog();
        return $blog->handle($request);
    }
}
 
/var/www/technexus/src/App.php
                return true;
            }
        }
        return false;
    }
    
    /**
     * Gets difference between process start and now in microseconds.
     *
     * @return void
     */
    public function getLoadTime()
    {
        return (microtime(true)-DIVERGENCE_START);
    }
 
    public function handleRequest()
    {
        $main = new Main();
        $response = $main->handle(ServerRequest::fromGlobals());
        (new Emitter($response))->emit();
    }
}
 
/var/www/technexus/bootstrap/router.php
<?php
/**
 * This file is part of the Divergence package.
 *
 * (c) Henry Paradiz <henry.paradiz@gmail.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
$app->handleRequest();
 
/var/www/technexus/public/index.php
<?php
require(__DIR__.'/../bootstrap/autoload.php');
require(__DIR__.'/../bootstrap/app.php');
require(__DIR__.'/../bootstrap/router.php');
 
Arguments
  1. "/var/www/technexus/bootstrap/router.php"
    

Environment & details:

empty
empty
empty
empty
empty
Key Value
USER
"www-data"
HOME
"/var/www"
SCRIPT_NAME
"/index.php"
REQUEST_URI
"/2018/2018/04/login_to_ssh_faster_and_with_greater_security_the_ssh_config_file/"
QUERY_STRING
""
REQUEST_METHOD
"GET"
SERVER_PROTOCOL
"HTTP/1.1"
GATEWAY_INTERFACE
"CGI/1.1"
REDIRECT_URL
"/2018/2018/04/login_to_ssh_faster_and_with_greater_security_the_ssh_config_file/"
REMOTE_PORT
"54742"
SCRIPT_FILENAME
"/var/www/technexus/public/index.php"
SERVER_ADMIN
"webmaster@localhost"
CONTEXT_DOCUMENT_ROOT
"/var/www/technexus/public"
CONTEXT_PREFIX
""
REQUEST_SCHEME
"https"
DOCUMENT_ROOT
"/var/www/technexus/public"
REMOTE_ADDR
"3.228.10.17"
SERVER_PORT
"443"
SERVER_ADDR
"192.241.147.251"
SERVER_NAME
"technex.us"
SERVER_SOFTWARE
"Apache/2.4.29 (Ubuntu)"
SERVER_SIGNATURE
"<address>Apache/2.4.29 (Ubuntu) Server at technex.us Port 443</address>\n"
PATH
"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
HTTP_CONNECTION
"Keep-Alive"
HTTP_HOST
"technex.us"
HTTP_ACCEPT_ENCODING
"br,gzip"
HTTP_IF_MODIFIED_SINCE
"Thu, 23 Jan 2020 21:01:54 GMT"
HTTP_ACCEPT_LANGUAGE
"en-US,en;q=0.5"
HTTP_ACCEPT
"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
HTTP_USER_AGENT
"CCBot/2.0 (https://commoncrawl.org/faq/)"
proxy-nokeepalive
"1"
SSL_TLS_SNI
"technex.us"
HTTPS
"on"
REDIRECT_STATUS
"200"
REDIRECT_SSL_TLS_SNI
"technex.us"
REDIRECT_HTTPS
"on"
FCGI_ROLE
"RESPONDER"
PHP_SELF
"/index.php"
REQUEST_TIME_FLOAT
1600659148.5383
REQUEST_TIME
1600659148
empty
0. Whoops\Handler\PrettyPageHandler