Page 1 of 1

Fatal error: Call to a member function get() on a non-object

Posted: Fri Jan 13, 2017 3:00 am
by shep91
Hello,

I've been searching for a long time and can't find a solution to my problem, it is causing some serious issues as we have orders which have been placed, but we cannot access our site to fulfill them so we are very concerned!

I am using opencart-2.0.1.1

Our website has been running fine for a couple of years with no problems after setting it up. We have made no changes recently and suddenly a few days ago have started receiving an error message when trying to log into our admin back end. The error reads:

Fatal error: Call to a member function get() on a non-object in /var/sites/p/paper-jungle.co.uk/public_html/admin/index.php on line 83

Line 83 of index.php reads:

Code: Select all

	if ($config->get('config_error_display')) {
		echo '<b>' . $error . '</b>: ' . $errstr . ' in <b>' . $errfile . '</b> on line <b>' . $errline . '</b>';
I have checked my config.php and it appears to be in order and hasn't been changed anyway. I found a suggestion to check session.php and config.php under the system/library directory of my store, I tried changing the permissions to both files to see if increasing the permissions would help, no luck. I also tried re-uploading the entire library directory from a local folder, no luck.

The only progress I have had so far was following a suggestion to change the code in my session.php file from:

Code: Select all

session_start();
To

Code: Select all

session_save_path(realpath(dirname($_SERVER['DOCUMENT_ROOT']) . '/../tmp'));
This made the error message disappear on the login page, however, it didn't actually fix the problem, the page just continues to refresh upon entering our credentials.

Please if anyone could shed any light on this it would be a real help!

Re: Fatal error: Call to a member function get() on a non-ob

Posted: Fri Jan 13, 2017 7:38 am
by Tomit
It looks like $config is not an object, so for some reason it didn't load the config object, can you make sure the file exists : system/library/config.php

and also admin/config.php?

Re: Fatal error: Call to a member function get() on a non-ob

Posted: Fri Jan 13, 2017 8:35 am
by shep91
Thank you for the reply Tomit. Both system/library/config.php and admin/config.php exist on the server. The config.php within system/library reads:

Code: Select all

<?php
class Config {
	private $data = array();

	public function get($key) {
		return (isset($this->data[$key]) ? $this->data[$key] : null);
	}

	public function set($key, $value) {
		$this->data[$key] = $value;
	}

	public function has($key) {
		return isset($this->data[$key]);
	}

	public function load($filename) {
		$file = DIR_CONFIG . $filename . '.php';

		if (file_exists($file)) {
			$_ = array();

			require($file);

			$this->data = array_merge($this->data, $_);
		} else {
			trigger_error('Error: Could not load config ' . $filename . '!');
			exit();
		}
	}
}
The config.php in admin reads:

Code: Select all

<?php
// HTTP
define('HTTP_SERVER', 'http://www.paper-jungle.co.uk/admin/');
define('HTTP_CATALOG', 'http://www.paper-jungle.co.uk/');

// HTTPS
define('HTTPS_SERVER', 'http://www.paper-jungle.co.uk/admin/');
define('HTTPS_CATALOG', 'http://www.paper-jungle.co.uk/');

// DIR
define('DIR_APPLICATION', '/var/sites/p/paper-jungle.co.uk/public_html/admin/');
define('DIR_SYSTEM', '/var/sites/p/paper-jungle.co.uk/public_html/system/');
define('DIR_LANGUAGE', '/var/sites/p/paper-jungle.co.uk/public_html/admin/language/');
define('DIR_TEMPLATE', '/var/sites/p/paper-jungle.co.uk/public_html/admin/view/template/');
define('DIR_CONFIG', '/var/sites/p/paper-jungle.co.uk/public_html/system/config/');
define('DIR_IMAGE', '/var/sites/p/paper-jungle.co.uk/public_html/image/');
define('DIR_CACHE', '/var/sites/p/paper-jungle.co.uk/public_html/system/cache/');
define('DIR_DOWNLOAD', '/var/sites/p/paper-jungle.co.uk/public_html/system/download/');
define('DIR_UPLOAD', '/var/sites/p/paper-jungle.co.uk/public_html/system/upload/');
define('DIR_LOGS', '/var/sites/p/paper-jungle.co.uk/public_html/system/logs/');
define('DIR_MODIFICATION', '/var/sites/p/paper-jungle.co.uk/public_html/system/modification/');
define('DIR_CATALOG', '/var/sites/p/paper-jungle.co.uk/public_html/catalog/');

// DB
define('DB_DRIVER', 'mysqli');
define('DB_HOSTNAME', 'removed for security');
define('DB_USERNAME', 'removed for security');
define('DB_PASSWORD', 'removed for security');
define('DB_DATABASE', 'removed for security');
define('DB_PREFIX', 'oc_');
I also tried removing the www. from the domain, it had no effect.

Re: Fatal error: Call to a member function get() on a non-ob

Posted: Fri Jan 13, 2017 11:31 am
by shep91
I finally managed to fix this issue! For anyone who's searching for the answer... I added the following code:

Code: Select all

session.save_path = /tmp;
to the bottom of the php.ini file.

I can't explain why this worked and definitely can't explain why the problem happened in the first place, if anyone could shed any light on it for future reference that would be great :). But aside from that I consider this post solved.

Re: Fatal error: Call to a member function get() on a non-ob

Posted: Fri Jan 13, 2017 4:13 pm
by Tomit
shep91 wrote:I finally managed to fix this issue! For anyone who's searching for the answer... I added the following code:

Code: Select all

session.save_path = /tmp;
to the bottom of the php.ini file.

I can't explain why this worked and definitely can't explain why the problem happened in the first place, if anyone could shed any light on it for future reference that would be great :). But aside from that I consider this post solved.
Good job :) the error is pretty vague, I wouldn't think that was the issue..