Jump to content
Sign in to follow this  
Condorious

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

Recommended Posts

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

Поставил 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?

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

 

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

Share this post


Link to post
Share on other sites

отсыпьте.

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

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

Share this post


Link to post
Share on other sites
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?

 

 

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

Share this post


Link to post
Share on other sites

Ставил давно другу 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();
	}
}
?>

Share this post


Link to post
Share on other sites

Меняем в 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

Share this post


Link to post
Share on other sites

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

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

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

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

  • +1 1

Share this post


Link to post
Share on other sites

Помогите пожалуйста 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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
В 26.01.2017 в 17:00, alexmay сказал:

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


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

на


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

 

Спасибо, помогло 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.