Забыли пароль?
Запросите новый здесь.

Автор темы: Vveb--ws
ID темы: 2936
Информация:
Тема содержит 8 сообщения, была просмотрена 6502 раз.  Имеются прикрепленные файлы.
Просмотр темы
PHP-Fusion Russia » Поддержка 7 версии » Пожелания и предложения
 Распечатать тему
какие функции надо переписать для PHP 7?
Vveb--ws
привет

какие функции надо переписать для PHP 7?

кто в курсе дайте инфу

сегодня у клиента сайт перестал работать из-за того что кто-то включил php 7.1
а именно не работало соединение с БД
 
Web
Polarfox
мускл устарело и обсолете, и было отключено?
Всегда делайте backup перед изменениями | Указывайте свою версию в подписи/профиле. | Вся бесплатная тех. поддержка только на форуме

PolarLab - вход для подопытных
 
Web
hungel
Замени свой maincore на приатаченный.
Если в твоем maincore есть нужные тебе изменения то замени в нем функции работы с БД.
Если нужно устанавливать систему на PHP 7, аналогично берем функции работы с БД и заменяем в setup.php
hungel присоединено следующее:файл:
maincore_1.zip [9.29кБ / 240 Загрузки]
x1
 
Vveb--ws
огромное спасибо!

а кроме функций по работе с БД ничего менять не надо в PHP-Fusion?
 
Web
hungel
Насколько я знаю остальное должно работать.
Некоторые функции могли устареть и могут возникнуть notice, о необходимости замены некоторых функций.
Рекомендую озаботиться этим заранее и включить отображение или логирование notice, ибо через пару обновлений разработчики PHP могут исключить эти функции и тогда они совсем перестанут работать.
 
Dave
Если в твоем maincore есть нужные тебе изменения то замени в нем функции работы с БД.
Если нужно устанавливать систему на PHP 7, аналогично берем функции работы с БД и заменяем в setup.php


Уважаемый hungel Можно чуть подробнее?
Думаю многие будут благодарны, не все ещё эксперты..ab
Если перебрал - задрай переборки.
 
hungel
Нужно заменить функции которые работают с БД.
Дело в том, что новый PHP больше не умеет работать с mysql. Этих функций просто больше нет. Под mysql я подразумеваю не базу данных как таковую а драйвер базы. Для работы с базой теперь используются мало отличающиеся функции mysqli. В большинстве случаев нужно просто добавить к функции букву i, но есть и исключения.

Например вот старая функция
Скачать исходники  Код
function dbquery($query) {
   global $mysql_queries_count, $mysql_queries_time; $mysql_queries_count++;

   $query_time = get_microtime();
   $result = @mysql_query($query);
   $query_time = substr((get_microtime() - $query_time),0,7);

   $mysql_queries_time[$mysql_queries_count] = array($query_time, $query);
   
   if (!$result) {
      echo mysql_error();
      return false;
   } else {
      return $result;
   }
}




А вот новая.

Скачать исходники  Код
function dbquery($query) {
   global $mysql_queries_count, $db_connect, $mysql_queries_time; $mysql_queries_count++;

   $query_time = get_microtime();
   $result = @mysqli_query($db_connect, $query);
   $query_time = substr((get_microtime() - $query_time),0,7);

   $mysql_queries_time[$mysql_queries_count] = array($query_time, $query);
   
   if (!$result) {
      //echo mysqli_error($db_connect);
      return false;
   } else {
      return $result;
   }
}




По сути изменений минимум.
Так, вот если вы, дописывали в файл maincore.php что-то свое или добавляли чужое, без того, что вы добавляли вероятнее всего у вас перестанет, что-то работать. Чтобы этого не случилось нужно не просто заменить весь файл, а только поменять функции работы с БД. Если в вашем maincore изменений нет, то можно просто заменить файл.

Если вы хотите, установить стоковый PHP-Fusion на сервер с PHP7 то нужно заменить функции работы с БД не только в minecore, но и в файле setup.php. Функции работы с БД в этих файлах одинаковые.

Собственно сами функции начинаются с комментария // MySQL database functions
 
Vveb--ws
Что делать по порядку:

1) В файле maincore.php (PHP-Fusion 7) или maincore_db.php (PHP-Fusion 7 Bogatyr) есть строка:
Скачать исходники  Код
// Establish mySQL database connection
$link = dbconnect($db_host, $db_user, $db_pass, $db_name);




2) Для каждой функции, работющей с БД, добавляем в global переменную $db_connect;
Скачать исходники  Код
function *****(…) {
   global $db_connect;




3) Для функций начинающихся с "mysql_" делаем автозамену по всем PHP-файлам на "mysqli_".
Проверяем существование новых функций.

4) Для некоторых функций, работющих с БД, добавляем первым аргументом $db_connect
Можно через автозамену согласно таблице:
mysql_query( --> mysqli_query($db_connect,
mysql_select_db( --> mysqli_select_db($db_connect,
mysql_real_escape_string( --> mysqli_real_escape_string($db_connect,
mysql_close() --> mysqli_close($db_connect)
mysql_error() --> mysqli_error($db_connect)
mysql_get_server_info() --> mysqli_get_server_info($db_connect)
mysql_affected_rows() --> mysqli_affected_rows($db_connect)


mysqli_close() вместо mysql_close() находится в /themes/templates/footer.php

внимательно смотрим примеры где добавляется $link (в нашей cms - $db_connect)
mysqli_affected_rows - https://www.php.net/manual/ru/mysqli.affected-rows.php
Процедурный стиль
Скачать исходники  Код
<?php
$db_connect = mysqli_connect("localhost", "my_user", "my_password", "world");

mysqli_query($db_connect, "CREATE TABLE Language SELECT * from CountryLanguage");

printf("Затронутые строки (INSERT): %d\n", mysqli_affected_rows($db_connect));

mysqli_close($db_connect);
?>




mysqli_close - https://www.php.net/manual/ru/mysqli.close.php

Для PHP-Fusion функция выгялит так:
Скачать исходники  Код
function dbconnect($db_host, $db_user, $db_pass, $db_name) {
   global $db_connect, $db_charset;
   $db_connect = @mysqli_connect($db_host, $db_user, $db_pass, $db_name);
   mysqli_query($db_connect, "SET NAMES '".$db_charset."'"); //
   if (!$db_connect) {
      die("<strong>Unable to establish connection to MySQL</strong><br />".mysqli_errno($db_connect)." : ".mysqli_error($db_connect));
   }
}




продолжение следует.
это конечно же не все изменения

вместо замены
mysql_close() --> mysqli_close($link)
mysql_insert_id() --> mysqli_insert_id($link)

я создал 2 пользовательские функции
Скачать исходники  Код
function dbclose()  {
            global  $db_connect;
            @mysqli_close($db_connect);  // @mysql_close();
}
 
function dbinsertid()  {
            global  $db_connect;
            return @mysqli_insert_id($db_connect); // return @mysql_insert_id();
}



соответственно в коде замена будет:
mysql_close() --> dbclose()
mysql_insert_id() --> dbinsertid()


Подключение файла для работы с БД
у меня на хостинге PHP_VERSION=7.0.33-0+deb9u7 и она НЕработает в version_compare()
чтобы работало в PHP5 и PHP7
Скачать исходники  Код
if (strpos("_".PHP_VERSION, '-', 0)>0) {
   define("PHP_VERSION_NUBMER", substr(PHP_VERSION, 0, strpos(PHP_VERSION, '-', 0) ));
} else {
   define("PHP_VERSION_NUBMER", PHP_VERSION);
}

   // ФУНКЦИИ ПОДКЛЮЧЕНИЯ К БД
   if (version_compare(PHP_VERSION_NUBMER, '7.0.0') >= 0) { //  MySQLi
   // if (version_compare(PHP_VERSION_NUBMER, '7.0.0', '>=')) {  // MySQLi     
        require_once "../landing-main/db_maincore_php7.php";
        // echo 'Я использую PHP версии не ниже 7.0.0, моя версия: ' . PHP_VERSION . "\n";
    } else {    //  MySQL
        require_once  "../landing-main/db_maincore_php5.php";
   }




пути для require_once конечно же у вас будут другие

Принципиальное отличие:
Скачать исходники  Код
// Функция заменяет отсутствующую в MySqli функцию mysql_result
function mysqli_result($res,$row=0,$col=0){
    $numrows = mysqli_num_rows($res);
    if ($numrows && $row <= ($numrows-1) && $row >=0){
        mysqli_data_seek($res,$row);
        $resrow = (is_numeric($col)) ? mysqli_fetch_row($res) : mysqli_fetch_assoc($res);
        if (isset($resrow[$col])){
            return $resrow[$col];
        }
    }
    return false;
}




в архиве все функции.
БД уже работает и в PHP5 и в PHP7 в частности на 1and.ru
очень помог hungel файл: maincore_1.zip [9.29кБ]

строковые функции неработающие в PHP7 я сделаю похже.
Vveb--ws присоединено следующее:файл:
db-php5-php7.zip [4.14кБ / 8 Загрузки]

Изменил(а) Vveb--ws, 24.03.2020 13:45
 
Web

Поделиться этой темой
Социальные закладки: Vkontakte Odnoklassniki Mail.ru Facebook Google Tweet This
URL:
BBcode:
HTML:

Перейти на форум:
Похожие темы
Темы Форум Ответов / Просмотров Последние сообщения
PHP-Fusion 7 Bogatyr - бесплатная мультиязычная CMS для блога, форума, фотогалереи  →  Моды 20 / 15435 17.03.2020 19:59
Кто делал гибрид Wordpress и PHP-Fusion?  →  Пожелания и предложения 3 / 133 08.03.2020 15:50
Какой плагин PHP-Fusion уместно использовать для создания сайта КВИЗа?  →  Пожелания и предложения 1 / 270 18.02.2020 15:14
InstaSpider - инстаграм программа шпион для мониторинга новых подписчиков пользователей  →  Флуд 0 / 153 12.02.2020 18:34
Добавление Ваших сайтов на php-fusion на сайт!  →  Новости и объявления 1 / 2237 24.01.2020 06:14
Каким ява скриптом приделать выбор цвета для поля input type="text"?  →  Вопросы новичков 1 / 256 10.01.2020 20:47
Глубокая модернизация комментариев в PHP-Fusion  →  Моды 1 / 322 19.11.2019 18:16
Если есть ошибка в теме или панели PHP-Fusion то мы часто видим белый экран  →  Пожелания и предложения 9 / 7037 21.10.2019 09:29
Покопаться в чужом коде для парсинга. Wordpress.  →  Платные услуги 1 / 698 04.09.2019 13:50
Zinsta - Программа для раскрутки и продвижения instagram  →  Флуд 10 / 2621 27.08.2019 15:19
Топ 5 пользователей форума
Alex Alex (1,213)   Zaxap Zaxap (1,090)   Vova Vova (877)   Pisatel Pisatel (678)   util util (666)