исправлено Сидбонусы и крон

Nikolay90

Пользователь
У меня была такая же проблема. Выскакивала ошибка на крон-задачу статистики. Далее, я рассуждал так:
я проверил ещё раз php-код и таблицы в базе на предмет запятых вместо точек в десятичных представлениях чисел сидбонусов. Оказалось, что у меня всё в порядке.
Все знают, что php очень вольно относится к преобразованиям типов переменных, и по собственному усмотрению может преобразовать один тип в другой.
Сидбонусы, которые у нас прописаны в админке, сериализуются (преобразуются в пригодное для хранения представление) в массив значений типа value, после чего отправляются в базу (переменная seed_bonus_points таблицы bb_config).
Как должно происходить обратное преобразование (десериализация)? Судя по мануалу (

Please Login or Register to view hidden text.

раздел "Возвращаемое значение"), обратное преобразование может быть к одному из пяти (!) типов. По здравой логике, php сам должен был бы преобразовать по умолчанию к типу float...
Далее, я исходил из того, что php мог вольно десериализовать к любому типу по своему усмотрению. К тому же, нельзя забывать, что у всех разные трекеры и разные числа сидбонусов... поэтому я решил воспользоваться явным преобразование к типу float.
В 177-ой строке крон-задачи статистики (файл library/includes/cron/jobs/tr_cleanup_and_dlstat.php) есть строка с десериализацией:
PHP:
$seed_bonus = unserialize($bb_cfg['seed_bonus_points']);
я её заменил на строку с явным преобразованием к типу float:
PHP:
$seed_bonus = (float) unserialize($bb_cfg['seed_bonus_points']);
После чего, ошибка крон-задачи Tracker cleanup and dlstat из логов полностью исчезла и сидбонусы заработали нормально.

P. S. Вся эта ситуация заставила меня вспомнить одну из простых истин:
"Хороший стиль программирования предполагает явное преобразование типов данных".

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

Lynx

Пользователь
vitalix, ты запускал крон из админки при включенных сидбонусах, в которых дробные числа, - тоже нет ошибки?

Заменил 177 строку как у gerhanovn - ошибки не стало. Насколько корректно после этого будут работать сидбонусы - будем посмотреть...
 

Lynx

Пользователь
Знаю что есть серверный. Как раз при запуске северного ошибок нет, а когда запустил из админки, вылезла ошибка на tr_cleanup_and_dlstat.php. Такого же не должно быть.
 

Lynx

Пользователь
2.1.4 [ALPHA]:

PHP Warning: Invalid argument supplied for foreach() in /var/www/demo/data/www/***/library/includes/cron/jobs/tr_cleanup_and_dlstat.php on line 180
PHP:
foreach($seed_bonus as $i => $points)

Сидбонусы начисляются, рейтинг - нет.
 
Последнее редактирование:
Сверху