Перевод сайта на sBuilder на php7

Система sBuilder придумана давно и стала неактуальной уже лет наверно 10. Но есть сайты, которые никто не хочет или не может перевести на другие системы, и возникает необходимость поддерживать сайты на старых системах упраавления.

Такая система – это sBuilder.

Разработчики закончили её поддержку году наверно в 2010-м. Последние сообщения зарегистрированных пользователей форума были в 2017-м году.

Хозяева держат лишь автоматизированную систему получения лицензий, благодаря которой до сих пор возможно создать сайт на этой CMS-ке.

Стоит упомянуть, что система на самом деле достойна всяческой похвалы, так как времени на ее разработку и улучшение потрачено очень много и небезрезультатно! Казбек Елевкоев, если не ошибаюсь, – автор – очень тщательно и с предусмотрением впредь разработал все-все нюансы потребностей сайтодержателя.

Требования php7

Для php7 нужно исправить несколько моментов, которые мешают запустить сайт. Это фнкция each(), которая в php7 не поддерживается. Попытки её заменить в файле, который формирует ключ системы, приводят к нарушению лицензии.

Преодолеем трудность!

Чтобы избежать применения each(), люди советуют заменить ее своей функцией.

function myEach(&$arr) { $key = key($arr); $result = ($key === null) ? false : [$key, current($arr), 'key' => $key, 'value' => current($arr)]; next($arr); return $result; }

В файле /cms/lib/sbDB.inc.php в начале разместить эту функцию. Она будет использоваться как для frontend, так и для backend. Везде, где в файлах возникает функция each(), заменить её на myEach(). Это 2-3 случая. По-моему в этом же файле.

Далее: в моем случае возникла проблема с определением https: он не определялся системой. Для устранения я исправил код определения в двух местах:

Файл /cms/kernel/init.inc.php добавить строку

(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') ||

чтобы строки определения https выглядели так:

... /** * Доменное имя сайта */ if ( (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != '' && $_SERVER['HTTPS'] != 'off') || (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) || (isset($_SERVER['HTTP_X_SCHEME']) && sb_strtoupper($_SERVER['HTTP_X_SCHEME']) == 'HTTPS') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') || (isset($_SERVER['HTTP_X_HTTPS']) && sb_strtoupper($_SERVER['HTTP_X_HTTPS']) == 'ON') || strpos($_SERVER['REQUEST_URI'], "https://") !== false) { $protocol = 'https://'; define('SB_HTTPS', true); } ...

То же самое в файле /cms/kernel/prog/init.inc.php