dra87370 2018-05-20 21:19 采纳率: 100%
浏览 74

Opencart Uncaught Error:在null上调用成员函数get()

I have Opencart 1.5.x API connected to a Mobile Application the mobile application is returning an error

 Fatal error:  Uncaught Error: Call to a member function get()
 on null in /var/www/vhosts/example.com/httpdocs/api/wk_index.php:109

 Stack trace:
 0 [internal function]: error_handler(2, 'Cannot modify h...', '/var/www/vhosts...', 4389, Array)
 1 /var/www/vhosts/example.com/httpdocs/api/lib/nusoap.php(4389): header('Server: NuSOAP ...', false)
 2 /var/www/vhosts/example.com/httpdocs/api/lib/nusoap.php(3829): nusoap_server->send_response()
 3 /var/www/vhosts/example.com/httpdocs/api/appserver.php(1776): nusoap_server->service('<?xml version="...')
 4 {main}   thrown in <b>/var/www/vhosts/example.com/httpdocs/api/wk_index.php</b> on line
 109

 Error example=NSXMLParserErrorexample Code=76 "(null)"
 UserInfo={NSXMLParserErrorColumn=8, NSXMLParserErrorLineNumber=137,
 NSXMLParserErrorMessage=Opening and ending tag mismatch: link line 0
 and head }

Line 109 in wk_index.php

if ($config->get('config_error_display')) {
    echo '<b>' . $error . '</b>: ' . $errstr . ' in <b>' . $errfile . '</b> on line <b>' . $errline . '</b>';
}

The full wk_index.php file info

<?php
// Version
define('VERSION', '1.5.2.1');

// Configuration
require_once('../config.php');


require_once(DIR_SYSTEM . 'library/pagecache.php');             //PAGECACHE
$pagecache = new PageCache();                                   //PAGECACHE
if ($pagecache->ServeFromCache()) {                             //PAGECACHE
    // exit here if we served this page from the cache          //PAGECACHE
    return;                                                     //PAGECACHE
}                                                               //PAGECACHE

// Install

    // Startup
    require_once(DIR_SYSTEM . 'startup.php');

    // Application Classes
    require_once(DIR_SYSTEM . 'library/customer.php');
    require_once(DIR_SYSTEM . 'library/affiliate.php');
    require_once(DIR_SYSTEM . 'library/currency.php');
    require_once(DIR_SYSTEM . 'library/tax.php');
    require_once(DIR_SYSTEM . 'library/weight.php');
    require_once(DIR_SYSTEM . 'library/length.php');
    require_once(DIR_SYSTEM . 'library/cart.php');
    require_once(DIR_SYSTEM . 'library/user.php');

//to detect admin
//require_once($vqmod->modCheck(DIR_SYSTEM . 'library/user.php'));

// Registry
$registry = new Registry();

// Loader
$loader = new Loader($registry);
$registry->set('load', $loader);

// Config
$config = new Config();
$registry->set('config', $config);

// Database 
$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
$registry->set('db', $db);

// Store
if (isset($_SERVER['HTTPS']) && (($_SERVER['HTTPS'] == 'on') || ($_SERVER['HTTPS'] == '1'))) {
    $store_query = $db->query("SELECT * FROM " . DB_PREFIX . "store WHERE REPLACE(`ssl`, 'www.', '') = '" . $db->escape('https://' . str_replace('www.', '', $_SERVER['HTTP_HOST']) . rtrim(dirname($_SERVER['PHP_SELF']), '/.\\') . '/') . "'");
} else {
    $store_query = $db->query("SELECT * FROM " . DB_PREFIX . "store WHERE REPLACE(`url`, 'www.', '') = '" . $db->escape('http://' . str_replace('www.', '', $_SERVER['HTTP_HOST']) . rtrim(dirname($_SERVER['PHP_SELF']), '/.\\') . '/') . "'");
}

if ($store_query->num_rows) {
    $config->set('config_store_id', $store_query->row['store_id']);
} else {
    $config->set('config_store_id', 0);
}

// Settings
//$query = $db->query("SELECT * FROM " . DB_PREFIX . "setting WHERE store_id = '0' OR store_id = '" . (int)$config->get('config_store_id') . "' ORDER BY store_id ASC");

$query = $db->query("SELECT * FROM " . DB_PREFIX . "setting WHERE store_id = '0'  ORDER BY store_id ASC");

foreach ($query->rows as $setting) {
    if (!$setting['serialized']) {
        $config->set($setting['key'], $setting['value']);
    } else {
        $config->set($setting['key'], unserialize($setting['value']));
    }
}

if (!$store_query->num_rows) {
    $config->set('config_url', HTTP_SERVER);
    $config->set('config_ssl', HTTPS_SERVER);
}

// Url
$url = new Url($config->get('config_url'), $config->get('config_use_ssl') ? $config->get('config_ssl') : $config->get('config_url'));
$registry->set('url', $url);

// Log
$log = new Log($config->get('config_error_filename'));
$registry->set('log', $log);

function error_handler($errno, $errstr, $errfile, $errline) {
    global $log, $config;

    switch ($errno) {
        case E_NOTICE:
        case E_USER_NOTICE:
            $error = 'Notice';
            break;
        case E_WARNING:
        case E_USER_WARNING:
            $error = 'Warning';
            break;
        case E_ERROR:
        case E_USER_ERROR:
            $error = 'Fatal Error';
            break;
        default:
            $error = 'Unknown';
            break;
    }

    if ($config->get('config_error_display')) {
        echo '<b>' . $error . '</b>: ' . $errstr . ' in <b>' . $errfile . '</b> on line <b>' . $errline . '</b>';
    }

    if ($config->get('config_error_log')) {
        $log->write('PHP ' . $error . ':  ' . $errstr . ' in ' . $errfile . ' on line ' . $errline);
    }

    return true;
}

// Error Handler
set_error_handler('error_handler');

// Request
$request = new Request();
$registry->set('request', $request);

// Response
$response = new Response();
$response->addHeader('Content-Type: text/html; charset=utf-8');
$response->setCompression($config->get('config_compression'));
$registry->set('response', $response);

// Cache
$cache = new Cache();
$registry->set('cache', $cache);

// Session
$session = new Session();
$registry->set('session', $session);

// Language Detection
$languages = array();

$query = $db->query("SELECT * FROM " . DB_PREFIX . "language WHERE status = '1'"); 

foreach ($query->rows as $result) {
    $languages[$result['code']] = $result;
}

$detect = '';

if (isset($request->server['HTTP_ACCEPT_LANGUAGE']) && ($request->server['HTTP_ACCEPT_LANGUAGE'])) { 
    $browser_languages = explode(',', $request->server['HTTP_ACCEPT_LANGUAGE']);

    foreach ($browser_languages as $browser_language) {
        foreach ($languages as $key => $value) {
            if ($value['status']) {
                $locale = explode(',', $value['locale']);

                if (in_array($browser_language, $locale)) {
                    $detect = $key;
                }
            }
        }
    }
}

if (isset($session->data['language']) && array_key_exists($session->data['language'], $languages) && $languages[$session->data['language']]['status']) {
    $code = $session->data['language'];
} elseif (isset($request->cookie['language']) && array_key_exists($request->cookie['language'], $languages) && $languages[$request->cookie['language']]['status']) {
    $code = $request->cookie['language'];
} elseif ($detect) {
    $code = $detect;
} else {
    $code = $config->get('config_language');
}

if (!isset($session->data['language']) || $session->data['language'] != $code) {
    $session->data['language'] = $code;
}

if (!isset($request->cookie['language']) || $request->cookie['language'] != $code) {
    setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $request->server['HTTP_HOST']);
}

$config->set('config_language_id', $languages[$code]['language_id']);
$config->set('config_language', $languages[$code]['code']);

// Language
$language = new Language($languages[$code]['directory']);
$language->load($languages[$code]['directory']);
$registry->set('language', $language);

// Document
$registry->set('document', new Document());

// Customer
$registry->set('customer', new Customer($registry));

// Affiliate
$registry->set('affiliate', new Affiliate($registry));

//user

$registry->set('user', new User($registry));

if (isset($request->get['tracking']) && !isset($request->cookie['tracking'])) {
    setcookie('tracking', $request->get['tracking'], time() + 3600 * 24 * 1000, '/');
}

// Currency
$registry->set('currency', new Currency($registry));

// Tax
$registry->set('tax', new Tax($registry));

// Weight
$registry->set('weight', new Weight($registry));

// Length
$registry->set('length', new Length($registry));

// Cart
$registry->set('cart', new Cart($registry));

//  Encryption
$registry->set('encryption', new Encryption($config->get('config_encryption')));

// Front Controller 
$controller = new Front($registry);

// Maintenance Mode
$controller->addPreAction(new Action('common/maintenance'));

// SEO URL's
$controller->addPreAction(new Action('common/seo_url'));    

// Router
if (isset($request->get['route'])) {
    $action = new Action($request->get['route']);
} else {
    $action = new Action('common/home');
}

// Dispatch
$controller->dispatch($action, new Action('error/not_found'));

// Output
$response->output();


if ($pagecache->OkToCache()) {                                  //PAGECACHE
    $pagecache->CachePage($response);                           //PAGECACHE
}                                                               //PAGECACHE 

?>

And this is the full config.php file

<?php
// HTTP
define('HTTP_SERVER', 'http://www.example.com/');

//define('HTTP_IMAGE', 'http://www.example.com/image/');
define('HTTP_IMAGE', 'http://wwwexamplecom-cdn.com/image/');

define('HTTP_ADMIN', 'http://www.example.com/admin/');
define('HTTPS_CATALOG', 'https://www.example.com/');
define('HTTP_CATALOG', 'http://www.example.com/');

// HTTPS
define('HTTPS_SERVER', 'https://www.example.com/');
define('HTTPS_IMAGE', 'https://www.example.com/image/');

// DIR
define('DIR_APPLICATION', '/var/www/vhosts/example.com/httpdocs/catalog/');
define('DIR_SYSTEM', '/var/www/vhosts/example.com/httpdocs/system/');
define('DIR_DATABASE', '/var/www/vhosts/example.com/httpdocs/system/database/');
define('DIR_LANGUAGE', '/var/www/vhosts/example.com/httpdocs/catalog/language/');
define('DIR_TEMPLATE', '/var/www/vhosts/example.com/httpdocs/catalog/view/theme/');
//define('DIR_DEFAULT_TEMPLATE', '/var/www/vhosts/example.com/httpdocs/catalog/view/theme/');
define('DIR_CONFIG', '/var/www/vhosts/example.com/httpdocs/system/config/');
define('DIR_IMAGE', '/var/www/vhosts/example.com/httpdocs/image/');
define('DIR_CACHE', '/var/www/vhosts/example.com/httpdocs/system/cache/');
define('DIR_DOWNLOAD', '/var/www/vhosts/example.com/httpdocs/download/');
define('DIR_LOGS', '/var/www/vhosts/example.com/httpdocs/system/logs/');

// DB
define('DB_DRIVER', 'mysqliz');
define('DB_HOSTNAME', 'IP Address');
define('DB_USERNAME', 'USER');
define('DB_PASSWORD', 'PASSWORD');
define('DB_DATABASE', 'example');
define('DB_PREFIX', '');
?>

I tried all possible ways yet of them are resolving my issues. The app not running and I'm stuck with error for 10 days, any help please.

Thank you in advanced!!!

EDIT: The issue cause estimated: After deep digging and for weeks I found that the server is receiving a SOAP 1.2/2.0 Request while I need it to be forced to SOAP 1.1

So either I should change the code to accept 1.2/2.0 SOAP or to force the request to be sent as SOAP 1.1, Any help please?

Edit: 05/07/2018
Does PHP-FPM affects SOAP response? Please need your help to resolve this issue

cURL configurations:
curl
cURL support enabled
cURL Information 7.35.0
Age 3
Features
AsynchDNS Yes
CharConv No
Debug No
GSS-Negotiate Yes
IDN Yes
IPv6 Yes
krb4 No
Largefile Yes
libz Yes
NTLM Yes
NTLMWB Yes
SPNEGO No
SSL Yes
SSPI No
TLS-SRP Yes
HTTP2 No
Protocols dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, ldaps, pop3, pop3s, rtmp, rtsp, smtp, smtps, telnet, tftp
Host x86_64-pc-linux-gnu
SSL Version OpenSSL/1.0.1f
ZLib Version 1.2.8

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 微信小程序协议怎么写
    • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
    • ¥20 怎么用dlib库的算法识别小麦病虫害
    • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
    • ¥15 java写代码遇到问题,求帮助
    • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
    • ¥15 有了解d3和topogram.js库的吗?有偿请教
    • ¥100 任意维数的K均值聚类
    • ¥15 stamps做sbas-insar,时序沉降图怎么画
    • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看