Форуми / National / Russian / Тех. поддержка / переезд с PHP 5.4  на PHP 8.1 и Cotonti 0.9.21

12345>>>

Kabak
#1 27.12.2022 19:40

Переношу сайт с PHP 5.4  на PHP 8.1 и Cotonti 0.9.21 


Warning: Undefined array key "online_shield" in /var/www/apcfix/system/common.php on line 502
Warning: Undefined array key "online_action" in /var/www/apcfix/system/common.php on line 503
Warning: Undefined array key "online_hammer" in /var/www/apcfix/system/common.php on line 504
Warning: Undefined array key "online_lastseen" in /var/www/apcfix/system/common.php on line 504

/* ======== Anti-hammering =========*/

if ($cfg['shieldenabled'] &&
	($usr['id'] == 0 || !cot_auth('admin', 'a', 'A') || $cfg['shield_force']))
{
	$shield_limit = $_SESSION['online_shield'];
	$shield_action = $_SESSION['online_action'];
	$shield_hammer = cot_shield_hammer($_SESSION['online_hammer'], $shield_action, $_SESSION['online_lastseen']);
	$sys['online_hammer'] = $shield_hammer;
	$_SESSION['online_lastseen'] = (int)$sys['now'];
}

как это лечится ?

jCube Group
#2 28.12.2022 12:34
isset($_SESSION['online_shield']) && $_SESSION['online_shield']

 

Сделал группу в телеге https://t.me/Cotonti_help если что помогу с вопросами.
Dayver
#3 28.12.2022 14:56
#45772 Kabak:

Переношу сайт с PHP 5.4  на PHP 8.1 и Cotonti 0.9.21 


Warning: Undefined array key "online_shield" in /var/www/apcfix/system/common.php on line 502
Warning: Undefined array key "online_action" in /var/www/apcfix/system/common.php on line 503
Warning: Undefined array key "online_hammer" in /var/www/apcfix/system/common.php on line 504
Warning: Undefined array key "online_lastseen" in /var/www/apcfix/system/common.php on line 504

...

как это лечится ?

Просьба скачать обновлённый common.php и протестировать изменения исправляющие это

Pavlo Tkachenko aka Dayver

Відредаговано: Dayver (30.12.2022 13:25, 1 рік тому)
Alex300
#4 29.12.2022 05:42

Для обновления нужно скопировать обновленные файлы в корень Вашего сайта. Не забудьте перед обновлением сделать бекап БД.

Инструкция

Переключитесь на PHP 8.1, потом замените файлы cotonti на обновленные с новой версии, потом обнавляйтесь запустив https://<ваш_домен>/install.php. Если у Вас MySQL версии 5.7 или выше, кодировка БД будет сконвертирована в utf8mb4 автоматически.

Есть миры, не здесь, там, где небеса горят, и моря засыпают, и реки дремлют; люди сделаны из дыма, а города – из песен. Где-то опасность, где-то несправедливость, даже где-то остыл чай. Идем Эйс, у нас много работы!...
...Sorry for my english...
Бесплатные расширения для Cotonti: https://lily-software.com/free-scripts/

Відредаговано: Alex300 (29.12.2022 09:29, 1 рік тому)
Kabak
#5 29.12.2022 09:09

благодарю

Добавлено 4 секунды спустя:

/**
	 * Assigns a template variable or an array of them
	 *
	 * @param mixed $name Variable name or array of values
	 * @param mixed $val Tag value if $name is not an array
	 * @param string $prefix An optional prefix for variable keys
	 * @return XTemplate $this object for call chaining
	 */
	public function assign($name, $val = NULL, $prefix = '')
	{
		if (is_array($name))
		{
			foreach ($name as $key => $val)
			{
				$this->vars[$prefix.$key] = $val;
			}
		}
		else
		{
			$this->vars[$prefix.$name] = $val;
		}
		return $this;
	}

 

$this->vars[$prefix.$key] = $val;   тут корректно удет  если $val = null ?

Добавлено 7 минут спустя:

Как сделать так, чтобы  этот NULL был  пустой строкой = ""  ?
Warning: Undefined array key "feedback_user" in /var/www/apcfix/plugins/feedback/inc/feedback.functions.php on line 51
Warning: Undefined array key "feedback_user" in /var/www/apcfix/plugins/feedback/inc/feedback.functions.php on line 52
Warning: Undefined array key "feedback_email" in /var/www/apcfix/plugins/feedback/inc/feedback.functions.php on line 53
Warning: Undefined array key "feedback_email" in /var/www/apcfix/plugins/feedback/inc/feedback.functions.php on line 54
Warning: Undefined array key "feedback_text" in /var/www/apcfix/plugins/feedback/inc/feedback.functions.php on line 55
Warning: Undefined array key "feedback_text" in /var/www/apcfix/plugins/feedback/inc/feedback.functions.php on line 56

 

/**
 * Generates a feedback form
 * @param  array   $rdata Form data
 * @param  mixed   $tpl   Template code or existing object
 * @param  string  $name  Form name (identifier)
 * @param  boolean $ajax  Whether the form is ajax or standalone
 * @return mixed          Rendered HTML or just TRUE, depending on $tpl type
 */
function feedback_form($rdata = array(), $tpl = 'feedback.global', $name = 'feedback-global', $ajax = true)
{
	global $cot_extrafields, $db_feedback, $cfg, $sys, $usr, $L;
	static $js_included = false;

	if (!is_array($rdata))
	{
		$rdata = array();
	}

	if (is_object($tpl))
	{
		$tt = $tpl;
	}
	else
	{
		$tt = new XTemplate(cot_tplfile($tpl, 'plug'));
	}

	$tt->assign(array(
		'FEEDBACK_FORM_SEND'       => cot_url('plug', 'e=feedback'),
		'FEEDBACK_FORM_USER_ID'    => cot_inputbox('hidden', 'ruserid', $usr['id']),
		'FEEDBACK_FORM_TOKEN'      => cot_inputbox('hidden', 'x', $sys['xk']),
		'FEEDBACK_FORM_AUTHOR'     => ($usr['id'] == 0) ? cot_inputbox('text', 'ruser', $rdata['feedback_user']) : cot_inputbox('text', 'ruser', $usr['name'], 'readonly="readonly"'),
		'FEEDBACK_FORM_AUTHOR_RAW' => ($usr['id'] == 0) ? $rdata['feedback_user'] : $usr['name'],
		'FEEDBACK_FORM_EMAIL'      => ($usr['id'] == 0) ? cot_inputbox('text', 'remail', $rdata['feedback_email']) : cot_inputbox('text', 'remail', $usr['profile']['user_email'], 'readonly="readonly"'),
		'FEEDBACK_FORM_EMAIL_RAW'  => ($usr['id'] == 0) ? $rdata['feedback_email'] : $usr['profile']['user_email'],
		'FEEDBACK_FORM_TEXT'       => cot_textarea('rtext', $rdata['feedback_text'], 3, 36),
		'FEEDBACK_FORM_TEXT_RAW'   => $rdata['feedback_text'],
		'FEEDBACK_FORM_NAME'       => cot_inputbox('hidden', 'name', $name),
		'FEEDBACK_FORM_ID'         => $name
	));

 

Добавлено 51 минута спустя:

просто сделать так  

 

	$rdata['feedback_text'] = "";
	$rdata['feedback_user'] = "";
	$rdata['feedback_email']= "";

до вызова 

    $tt->assign(array(
        'FEEDBACK_FORM_SEND'       => cot_url('plug', 'e=feedback'),
        'FEEDBACK_FORM_USER_ID'    => cot_inputbox('hidden', 'ruserid', $usr['id']),
        'FEEDBACK_FORM_TOKEN'      => cot_inputbox('hidden', 'x', $sys['xk']),
        'FEEDBACK_FORM_AUTHOR'     => ($usr['id'] == 0) ? cot_inputbox('text', 'ruser', $rdata['feedback_user']) : cot_inputbox('text', 'ruser', $usr['name'], 'readonly="readonly"'),
        'FEEDBACK_FORM_AUTHOR_RAW' => ($usr['id'] == 0) ? $rdata['feedback_user'] : $usr['name'],
        'FEEDBACK_FORM_EMAIL'      => ($usr['id'] == 0) ? cot_inputbox('text', 'remail', $rdata['feedback_email']) : cot_inputbox('text', 'remail', $usr['profile']['user_email'], 'readonly="readonly"'),
        'FEEDBACK_FORM_EMAIL_RAW'  => ($usr['id'] == 0) ? $rdata['feedback_email'] : $usr['profile']['user_email'],
        'FEEDBACK_FORM_TEXT'       => cot_textarea('rtext', $rdata['feedback_text'], 3, 36),
        'FEEDBACK_FORM_TEXT_RAW'   => $rdata['feedback_text'],
        'FEEDBACK_FORM_NAME'       => cot_inputbox('hidden', 'name', $name),
        'FEEDBACK_FORM_ID'         => $name
    ));

Так ?

Добавлено 7 минут спустя:

Warning: Undefined array key "timeback" in /var/www/apcfix/plugins/hits/hits.admin.home.php on line 23

Что нужно изменить в 23 -й строке ?  или где-то ещё что-то изменилось в движке ?


Відредаговано: Kabak (29.12.2022 10:56, 1 рік тому)
Dayver
#6 29.12.2022 15:07
#45776 Kabak:

просто сделать так  

 

	$rdata['feedback_text'] = "";
	$rdata['feedback_user'] = "";
	$rdata['feedback_email']= "";

до вызова 

    $tt->assign(array(
        'FEEDBACK_FORM_SEND'       => cot_url('plug', 'e=feedback'),
        'FEEDBACK_FORM_USER_ID'    => cot_inputbox('hidden', 'ruserid', $usr['id']),
        'FEEDBACK_FORM_TOKEN'      => cot_inputbox('hidden', 'x', $sys['xk']),
        'FEEDBACK_FORM_AUTHOR'     => ($usr['id'] == 0) ? cot_inputbox('text', 'ruser', $rdata['feedback_user']) : cot_inputbox('text', 'ruser', $usr['name'], 'readonly="readonly"'),
        'FEEDBACK_FORM_AUTHOR_RAW' => ($usr['id'] == 0) ? $rdata['feedback_user'] : $usr['name'],
        'FEEDBACK_FORM_EMAIL'      => ($usr['id'] == 0) ? cot_inputbox('text', 'remail', $rdata['feedback_email']) : cot_inputbox('text', 'remail', $usr['profile']['user_email'], 'readonly="readonly"'),
        'FEEDBACK_FORM_EMAIL_RAW'  => ($usr['id'] == 0) ? $rdata['feedback_email'] : $usr['profile']['user_email'],
        'FEEDBACK_FORM_TEXT'       => cot_textarea('rtext', $rdata['feedback_text'], 3, 36),
        'FEEDBACK_FORM_TEXT_RAW'   => $rdata['feedback_text'],
        'FEEDBACK_FORM_NAME'       => cot_inputbox('hidden', 'name', $name),
        'FEEDBACK_FORM_ID'         => $name
    ));

Так ?

Такое решение исправит варнинг но нарушит работу вашего плагина ... плагин не из коробки потому как он работает известно его автору и тем у кого есть его полный код

Добавлено 6 минут спустя:

#45776 Kabak:

Добавлено 7 минут спустя:

Warning: Undefined array key "timeback" in /var/www/apcfix/plugins/hits/hits.admin.home.php on line 23

Что нужно изменить в 23 -й строке ?  или где-то ещё что-то изменилось в движке ?

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

Pavlo Tkachenko aka Dayver

Відредаговано: Dayver (29.12.2022 15:13, 1 рік тому)
Kabak
#7 29.12.2022 16:03

Обновить не помогло 

Warning: Undefined array key "timeback" in /var/www/apcfix/plugins/hits/hits.admin.home.php on line 23

 

Добавлено 5 минут спустя:

 

Такое решение исправит варнинг но нарушит работу вашего плагина ... плагин не из коробки потому как он работает известно его автору и тем у кого есть его полный код

 

Но после вызова 

$tt->assign(array(

значения заменятся, если они есть.  Почему нарушится работа плагина ?  Вот как он начинается

require_once cot_incfile('extrafields');
require_once cot_incfile('forms');

require_once cot_langfile('feedback', 'plug');

if (!isset($GLOBALS['db_feedback'])) $GLOBALS['db_feedback'] = $GLOBALS['db_x'] . 'feedback';
global $db_feedback;
$cot_extrafields[$db_feedback] = (isset($cot_extrafields[$db_feedback] )) ? $cot_extrafields[$db_feedback] : array();

/**
 * Generates a feedback form
 * @param  array   $rdata Form data
 * @param  mixed   $tpl   Template code or existing object
 * @param  string  $name  Form name (identifier)
 * @param  boolean $ajax  Whether the form is ajax or standalone
 * @return mixed          Rendered HTML or just TRUE, depending on $tpl type
 */
function feedback_form($rdata = array(), $tpl = 'feedback.global', $name = 'feedback-global', $ajax = true)
{
	global $cot_extrafields, $db_feedback, $cfg, $sys, $usr, $L;
	static $js_included = false;

	if (!is_array($rdata))
	{
		$rdata = array();
	}

	if (is_object($tpl))
	{
		$tt = $tpl;
	}
	else
	{
		$tt = new XTemplate(cot_tplfile($tpl, 'plug'));
	}

	$rdata['feedback_text'] = "";
	$rdata['feedback_user'] = "";
	$rdata['feedback_email']= "";
	$tt->assign(array(
		'FEEDBACK_FORM_SEND'       => cot_url('plug', 'e=feedback'),
		'FEEDBACK_FORM_USER_ID'    => cot_inputbox('hidden', 'ruserid', $usr['id']),
		'FEEDBACK_FORM_TOKEN'      => cot_inputbox('hidden', 'x', $sys['xk']),
		'FEEDBACK_FORM_AUTHOR'     => ($usr['id'] == 0) ? cot_inputbox('text', 'ruser', $rdata['feedback_user']) : cot_inputbox('text', 'ruser', $usr['name'], 'readonly="readonly"'),
		'FEEDBACK_FORM_AUTHOR_RAW' => ($usr['id'] == 0) ? $rdata['feedback_user'] : $usr['name'],
		'FEEDBACK_FORM_EMAIL'      => ($usr['id'] == 0) ? cot_inputbox('text', 'remail', $rdata['feedback_email']) : cot_inputbox('text', 'remail', $usr['profile']['user_email'], 'readonly="readonly"'),
		'FEEDBACK_FORM_EMAIL_RAW'  => ($usr['id'] == 0) ? $rdata['feedback_email'] : $usr['profile']['user_email'],
		'FEEDBACK_FORM_TEXT'       => cot_textarea('rtext', $rdata['feedback_text'], 3, 36),
		'FEEDBACK_FORM_TEXT_RAW'   => $rdata['feedback_text'],
		'FEEDBACK_FORM_NAME'       => cot_inputbox('hidden', 'name', $name),
		'FEEDBACK_FORM_ID'         => $name
	));

 

Добавлено 7 минут спустя:

    isset($rdata['feedback_text']) ? $rdata['feedback_text'] : $rdata['feedback_text'] = "";
    isset($rdata['feedback_user']) ? $rdata['feedback_user'] : $rdata['feedback_user'] ="";
    isset($rdata['feedback_email']) ?  $rdata['feedback_email'] : $rdata['feedback_email'] ="";

Так лучше ?

Добавлено 49 минут спустя:

$sys['protecttopadmin']

1) Для чего и используется в движке ?

2) Как правильно использовать ?


Відредаговано: Kabak (29.12.2022 19:48, 1 рік тому)
Dayver
#8 29.12.2022 19:17
#45778 Kabak:

 

Добавлено 5 минут спустя:

 

Такое решение исправит варнинг но нарушит работу вашего плагина ... плагин не из коробки потому как он работает известно его автору и тем у кого есть его полный код

Но после вызова 

$tt->assign(array(

значения заменятся, если они есть.  Почему нарушится работа плагина ?  Вот как он начинается 

Вы видимо не понимаете как работают функции в PHP ... при её вызове в неё передаются параметры, дале внутри функции что то происходит и она возвращает результат своей работы. Вы же хотите задать переменным пустые строки вне зависимости от того переданы они при вызове функции или нет. По сути причину варнинга вы устраняете но и тем самым функция ВСЕГДА будет оперировать пустыми строками при работае с вышеупомянутыми параметрами.

Добавлено 7 минут спустя:

#45778 Kabak:

Обновить не помогло 

Warning: Undefined array key "timeback" in /var/www/apcfix/plugins/hits/hits.admin.home.php on line 23

 

Значит у вас проблема либо с плагином либо с параметром-массивом конфигурацй. При корректно установленном плагине hits в его конфигурации есть настройка значение которой должно быть в параметре $cfg['plugin']['hits']['timeback'] но если у вас вылазят варнинги по поводу того что в данном масиве нет значения с таким ключем то значит где то есть проблема

Добавлено 3 минуты спустя:

#45778 Kabak:

Добавлено 49 минут спустя:

$sys['protecttopadmin']

1) Для чего и используется в движке ?

2) Как правильно использовать ?

 Используется для блокировки попыток изменения логина и пароля админу. Переменная служебная и фигурирует только в одной локации сайта - на странице редактрирования пользователя потому боюсь она вам будет мало чем полезна в своих плагинах.

Добавлено 9 минут спустя:

#45778 Kabak:

Добавлено 2 часа спустя:

/**
 * Returns country text button
 *
 * @param string $flag Country code
 * @return string
 */
function cot_build_um_country($flag)
{
	global $cot_countries;
	if (!$cot_countries) include_once cot_langfile('countries', 'core');
	$flag = (empty($flag)) ? '00' : $flag;
	return cot_rc_link(cot_url('admin', 'm=other&p=userman&sort=country&f=country_'.$flag), $cot_countries[$flag], array(
		'title' => $cot_countries[$flag]
	));
}

/**
 * Returns country flag button
 *
 * @param string $flag Country code
 * @return string
 */
function cot_build_um_flag($flag)
{
	global $cot_countries;
	if (!$cot_countries) include_once cot_langfile('countries', 'core');
	$flag = (empty($flag)) ? '00' : $flag;
	return cot_rc_link(cot_url('admin', 'm=other&p=userman&sort=country&f=country_'.$flag),
		cot_rc('icon_flag', array('code' => $flag, 'alt' => $flag)),
		array('title' => $cot_countries[$flag])
	);
}

Не прокатывает  $flag = (empty($flag)) ? '00' : $flag;

Warning: Undefined array key "00" in /var/www/apcfix/plugins/userman/inc/userman.functions.php on line 582

Таких сообщений много.  Это когда у пользователя отсутствует выбранная страна в профиле ?   Как это исправить , чтобы можно было без выбранной страны?

Добавьте для своего языка ключ "00" в массив $cot_countries. Например в файле themes/nemesis/nemesis.ru.lang.php добавте строку

$cot_countries["00"] = 'Пусто';

Добавлено 2 минуты спустя:

#45778 Kabak:

Добавлено 7 минут спустя:

    isset($rdata['feedback_text']) ? $rdata['feedback_text'] : $rdata['feedback_text'] = "";
    isset($rdata['feedback_user']) ? $rdata['feedback_user'] : $rdata['feedback_user'] ="";
    isset($rdata['feedback_email']) ?  $rdata['feedback_email'] : $rdata['feedback_email'] ="";

Так лучше ?

Было бы синтаксически правильнее написать так

   $rdata['feedback_text'] =  isset($rdata['feedback_text']) ? $rdata['feedback_text'] : "";
   $rdata['feedback_user'] = isset($rdata['feedback_user']) ? $rdata['feedback_user'] : "";
   $rdata['feedback_email'] = isset($rdata['feedback_email']) ?  $rdata['feedback_email'] : "";

 

Pavlo Tkachenko aka Dayver

Відредаговано: Dayver (29.12.2022 19:40, 1 рік тому)
Kabak
#9 30.12.2022 07:09

Удалил и переустановил плагин HITS

старая ошибка ушла, но появилась 

Warning: Undefined variable $hits_d in /var/www/apcfix/plugins/hits/hits.admin.home.php on line 40

 

Вероятно, база была пустой после преустановки и отключил счётчик заходов админа

 

Добавлено 1 час спустя:

Как правильно обрабатывать дату рождения  пользователя у которого не указана дата ?  NULL  и '0000-00-00'  не проходят

Добавлено 2 часа спустя:

SQL error 23000: Integrity constraint violation: 1048 Column 'user_birthdate' cannot be null

#0 /var/www/apcfix/system/database.php(696): cot_diefatal('...')
#1 /var/www/apcfix/modules/users/inc/users.edit.php(203): CotDB->update('...', Array, '...')
#2 /var/www/apcfix/modules/users/users.php(32): include('...')
#3 /var/www/apcfix/index.php(181): require_once('...')

При обновлении профиля пользователя в движке


Відредаговано: Kabak (30.12.2022 11:14, 1 рік тому)
Dayver
#10 30.12.2022 13:25
#45780 Kabak:

Удалил и переустановил плагин HITS

старая ошибка ушла, но появилась 

Warning: Undefined variable $hits_d in /var/www/apcfix/plugins/hits/hits.admin.home.php on line 40

Просьба скачать обновлённый plugins/hits/hits.admin.home.php и протестировать изменения исправляющие это

Pavlo Tkachenko aka Dayver
Kabak
#11 30.12.2022 13:34

Имена пользователей которые содержат спец.символы  вызывают срабатываения 

https://i.gyazo.com/cd58fbcda7a6735a4817acef4f0bbc8d.png

 


Відредаговано: Kabak (30.12.2022 14:05, 1 рік тому)
Dayver
#12 30.12.2022 14:48
#45780 Kabak:

SQL error 23000: Integrity constraint violation: 1048 Column 'user_birthdate' cannot be null

#0 /var/www/apcfix/system/database.php(696): cot_diefatal('...')
#1 /var/www/apcfix/modules/users/inc/users.edit.php(203): CotDB->update('...', Array, '...')
#2 /var/www/apcfix/modules/users/users.php(32): include('...')
#3 /var/www/apcfix/index.php(181): require_once('...')

При обновлении профиля пользователя в движке

А вы обновление движка делали по инструкции?! Запускали  https://<ваш_домен>/install.php как это советовал Alex300 выше?

Добавлено 2 часа спустя:

#45780 Kabak:

Не смог повторить такую ошибку

Pavlo Tkachenko aka Dayver

Відредаговано: Dayver (30.12.2022 17:03, 1 рік тому)
Kabak
#13 30.12.2022 19:52

Я установил движок потом переписал недостающие плагины и полностью обновил базу , т.е. удалил базу и импортировал старую .  иначе она не импортировалась.  

Я понимаю, что где-то что-то не так в базе.  У меня нет выбора.  База не импортируется, если её не удалить.

Не подумал, что в структуре базы стандартного Cotonti что-то изменилось (

Как импортировать базу от старой Cotonti , чтобы она не вызывала ошибок при импорте ?

Добавлено 8 часов спустя:

Warning: Undefined variable $grpid in /var/www/dacha/plugins/hiddengroups/hiddengroups.users.buildgroup.php on line 18
Warning: Undefined array key "" in /var/www/dacha/plugins/hiddengroups/hiddengroups.users.buildgroup.php on line 18
Warning: Trying to access array offset on value of type null in /var/www/dacha/plugins/hiddengroups/hiddengroups.users.buildgroup.php on line 18

это уже на свежем движке

 

Свежая документация есть по движку ?

(Хотел бы помочь всё это исправить)

Добавлено 12 минут спустя:

Где почитать что изменилось в движке с версии patch_0.9.4 ?


Відредаговано: Kabak (31.12.2022 15:22, 1 рік тому)
Dayver
#14 31.12.2022 15:23
#45784 Kabak:

Добавлено 8 часов спустя:

Warning: Undefined variable $grpid in /var/www/dacha/plugins/hiddengroups/hiddengroups.users.buildgroup.php on line 18
Warning: Undefined array key "" in /var/www/dacha/plugins/hiddengroups/hiddengroups.users.buildgroup.php on line 18
Warning: Trying to access array offset on value of type null in /var/www/dacha/plugins/hiddengroups/hiddengroups.users.buildgroup.php on line 18

это уже на свежем движке

Про это знаю, поправлю на днях

Pavlo Tkachenko aka Dayver
Kabak
#15 31.12.2022 15:24

Я просто вижу, что очень многое изменилось с 2013 года , когдая последний раз писал плагины под Cotonti.

12345>>>