Перейти к содержанию
Condorious

[Решено] ocStore-1.5.5.1 не работает с PHP версии 5.5

Рекомендуемые сообщения

Добрый день, коллеги.

Поставил Kubuntu 14.04 альфу, версия PHP поднялась до 5.5.8.

OpenCart при этом выдаёт следующее сообщение:

 

Unknown: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /wwwroot/@_demoshop_5/vqmod/vqmod.php on line 329Unknown: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /wwwroot/@_demoshop_5/vqmod/vqmod.php on line 329

Можно ли как-то заставить OC работать с этой версией PHP?

Или всё-таки придётся искать способы даунгрейдить версию PHP хотя бы до 5.4?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По идеи, нужно переключить драйвер с MySQL на MySQLi

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По идеи, нужно переключить драйвер с MySQL на MySQLi

А можно поподробнее?

Если в конфиге просто поменять define('DB_DRIVER', 'mysql'); на define('DB_DRIVER', 'mysqli');

Сайт выдаст Error: Could not load database file mysqli!

Нужно как-то конвертировать базу или не хватает каких-то пакетов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А можно поподробнее?

Если в конфиге просто поменять define('DB_DRIVER', 'mysql'); на define('DB_DRIVER', 'mysqli');

Сайт выдаст Error: Could not load database file mysqli!

Нужно как-то конвертировать базу или не хватает каких-то пакетов?

 

Ребят, тема актуальна... Как переключить драйвер с MySQL на MySQLi в готовом магазине, подскажите, пожалуйста...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

отсыпьте.

у Condorious`a проблема с vQmod - к автору qPhoria на opencart.com.

Anlenka, https://opencartforum.com/topic/33805-драйвер-базы-данных-mysqli-синтаксическая-ошибка-ск/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Unknown: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead

 

По идеи, нужно переключить драйвер с MySQL на MySQLi

 

А при чем здесь MySQL/MySQLi ?!

 

В PHP 5.5 убрали функцию PHP - preg_replace() с модификатором /e (модификатор "подмены")

 

The preg_replace() /e modifier is now deprecated. Instead, use the preg_replace_callback() function.

 

 

http://stackoverflow.com/questions/19245205/replace-deprecated-preg-replace-e-with-preg-replace-callback

http://stackoverflow.com/questions/21334934/deprecated-preg-replace-the-e-modifier-is-deprecated-use-preg-replace-call

...

 

В 5.5 её "заменили" в целях безопасности на  preg_replace_callback()

 

Вообще используя PHP 5.5 советую отказаться от "старой" функции preg_replace() (теоретически пользователь/хакер может положить сервер)

 

Или всё-таки придётся искать способы даунгрейдить версию PHP хотя бы до 5.4?

 

 

Пока решение - только даунгрейдить

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ставил давно другу OSStore на хостинг, где был PHP 5.4, но хостеры решили обновить PHP. В результате получил сообщение deprecated mysql_connect. При поиске попал на эту тему, тут тоже люди ищут решение:

 

 

Ребят, тема актуальна... Как переключить драйвер с MySQL на MySQLi в готовом магазине, подскажите, пожалуйста...

 

Поскольку сам решения не нашел, полез в код исправлять. Переключение в конфиге на драйвер mysqli выдает ошибку, что класс mysqli уже существует.

 

Поэтому решение следующее, в конфиге напишите define('DB_DRIVER', 'storemysqli');

 

И закачайте в каталог system/database файл storemysql.php

 

Содержимое файла

<?php
final class StoreMySQLi {
	private $mysqli;
	
	public function __construct($hostname, $username, $password, $database) {
		$this->mysqli = new mysqli($hostname, $username, $password, $database);
		
		if ($this->mysqli->connect_error) {
      		trigger_error('Error: Could not make a database link (' . $this->mysqli->connect_errno . ') ' . $this->mysqli->connect_error);
		}
		
		$this->mysqli->query("SET NAMES 'utf8'");
		$this->mysqli->query("SET CHARACTER SET utf8");
		$this->mysqli->query("SET CHARACTER_SET_CONNECTION=utf8");
		$this->mysqli->query("SET SQL_MODE = ''");
  	}
		
  	public function query($sql) {
		$result = $this->mysqli->query($sql);

		if ($this->mysqli->errno !== 0) {
			trigger_error('Error: ' . mysqli_error($this->mysqli) . '<br />Error No: ' . mysqli_errno($this->mysqli) . '<br />' . $sql);
			exit();
		}
			if (is_object($result)) {
				$i = 0;
    	
				$data = array();
				
				while ($row = $result->fetch_array()) {
					$data[$i] = $row;
    	
					$i++;
				}

				$result->close();
				
				$query = new stdClass();
				$query->row = isset($data[0]) ? $data[0] : array();
				$query->rows = $data;
				$query->num_rows = $i;
				
				unset($data);
								
				return $query;	
    		} else {
				return true;
			}
	
  	}
	
	public function escape($value) {
		return $this->mysqli->real_escape_string($value);
	}
	
  	public function countAffected() {
    	return $this->mysqli->affected_rows;
  	}

  	public function getLastId() {
    	return $this->mysqli->insert_id;
  	}	
	
	public function __destruct() {
		$this->mysqli->close();
	}
}
?>

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Меняем в vqmod.php (~317 строка)

$modFilePath = preg_replace('/([^*]+)/e', 'preg_quote("$1", "~")', $modFilePath);

на

$modFilePath = preg_replace_callback('/([^*]+)/', function ($m) { return preg_quote($m[1], "~"); }, $modFilePath);

 

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Меняем в vqmod.php (~317 строка)

у меня 629 но не суть, вот ваша строчка она не решала проблему:

$modFilePath = preg_replace_callback('/([^*]+)/', function ($m) { return preg_quote($m[1], "~"); }, $modFilePath);

Ошибка с vqmod на php 5.5 устранена, спасибо.

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Помогите пожалуйста 3-й день бьюсь.

Ошибка:

2018-05-22 19:49:04 - PHP Unknown:  preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/*****/public_html/*******/vqmod/vqcache/vq2-catalog_controller_product_product.php on line 469

 

Перепробовал все из этого топика. Загружал драйвер. Ничего не помогает :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Раньше выдавало и в файле vqmod.php там вроде починилось, что делать с этой ошибкой не знаю. Появилась после переноса хостинга на другой сервер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.