Мне было поручено перенести веб-сайт OSCommerce с сервера под управлением PHP 5.3.3 на сервер под управлением PHP 7.0.33. Текущий веб-сайт использует версию 2.3.4 OSCommerce, и, читая на форумах OSC, я знаю, что это приведет к большому количеству ошибок при переходе на более новый PHP-сервер.
В идеале я должен обновить OSC до последней стабильной версии, но есть много пользовательского кода, который потенциально может стать абсолютным кошмаром для интеграции, и, кроме того, у меня есть ограничение по времени, чтобы сайт переместился и снова заработал.
Я очистил множество основных ошибок и предупреждений, но единственная ошибка, с которой у меня возникают проблемы, - это вызов класса 'messageStack', который отображает информационное окно ajax / jquery для отображения элементов, добавленных в корзину, или проблем с формы и т. д.
Ошибка:
Неустранимая ошибка: необученная ошибка: вызов неопределенного метода
messageStack :: alertBlock () в
/home/xxxx/public_html/xxxx/includes/classes/message_stack.php:66
Трассировка стека: # 0
/home/xxxx/public_html/xxxx/includes/modules/product_listing.php(4):
messageStack-> output ('product_action') # 1
/home/xxxx/public_html/xxxx/index.php(227):
include ('/ home / xxxx ...') # 2 {main}
/home/xxxx/public_html/xxxx/includes/classes/message_stack.php
по линии 66
Соответствующая строка:
return $this->alertBlock($output);
message_stack.php
class messageStack extends alertBlock {
// class constructor
function __construct() {
$this->messages = array();
if (isset($_SESSION['messageToStack'])) {
for ($i=0, $n=sizeof($_SESSION['messageToStack']); $i<$n; $i++) {
$this->add($_SESSION['messageToStack'][$i]['class'], $_SESSION['messageToStack'][$i]['text'], $_SESSION['messageToStack'][$i]['type']);
}
unset($_SESSION['messageToStack']);
}
}
// class methods
function add($class, $message, $type = 'error') {
if ($type == 'error') {
$this->messages[] = array('params' => 'class="alert alert-danger alert-dismissible"', 'class' => $class, 'text' => $message);
} elseif ($type == 'warning') {
$this->messages[] = array('params' => 'class="alert alert-warning alert-dismissible"', 'class' => $class, 'text' => $message);
} elseif ($type == 'success') {
$this->messages[] = array('params' => 'class="alert alert-success alert-dismissible"', 'class' => $class, 'text' => $message);
} else {
$this->messages[] = array('params' => 'class="alert alert-info alert-dismissible"', 'class' => $class, 'text' => $message);
}
}
function add_session($class, $message, $type = 'error') {
if (!isset($_SESSION['messageToStack'])) {
$_SESSION['messageToStack'] = array();
}
$_SESSION['messageToStack'][] = array('class' => $class, 'text' => $message, 'type' => $type);
}
function reset() {
$this->messages = array();
}
function output($class) {
$output = array();
for ($i=0, $n=sizeof($this->messages); $i<$n; $i++) {
if ($this->messages[$i]['class'] == $class) {
$output[] = $this->messages[$i];
}
}
return $this->alertBlock($output);
}
function size($class) {
$count = 0;
for ($i=0, $n=sizeof($this->messages); $i<$n; $i++) {
if ($this->messages[$i]['class'] == $class) {
$count++;
}
}
return $count;
}
}
и alertbox.php
class alertBlock {
// class constructor
function __construct($contents, $alert_output = false) {
$alertBox_string = '';
for ($i=0, $n=sizeof($contents); $i<$n; $i++) {
$alertBox_string .= ' <div';
if (isset($contents[$i]['params']) && tep_not_null($contents[$i]['params']))
$alertBox_string .= ' ' . $contents[$i]['params'];
$alertBox_string .= '>' . "\n";
$alertBox_string .= ' <button type="button" class="close" data-dismiss="alert">×</button>' . "\n";
$alertBox_string .= $contents[$i]['text'];
$alertBox_string .= ' </div>' . "\n";
}
if ($alert_output == true) echo $alertBox_string;
return $alertBox_string;
}
}
Кто-нибудь имеет представление о том, почему это происходит? Я разместил этот точный вопрос на форумах OSCommerce, но пока не получил ответа, поэтому я подумал, что могу спросить здесь на случай, если кто-нибудь из вас, добрые люди, может помочь.