Перейти до

Рекомендованные сообщения

Опубликовано:

Здається, після оновлення PHP 7.4 до PHP 8.2 feesharvester припинив працювати:

 

/usr/local/bin/curl "http://127.0.0.1/billing/?module=remoteapi&key={SERIAL}&action=feesharvester"
<br />
<b>Fatal error</b>:  Uncaught TypeError: Unsupported operand types: string - string in {UBPATH}/billing/api/libs/api.fundsflow.php:570
Stack trace:
#0 {UBPATH}/billing/modules/remoteapi/feesharvester.php(22): FundsFlow-&gt;harvestFees('2024-01')
...

 

Невеличке розслідування врешті з'ясувало, що це через наявність пробілу у деяких логінах абонентів. Як так сталося? Тому що інколи був неуважно додан трейлінг пробіл до номеру будинка і цей пробіл потрапив до логіну абоненту. Логін абоненту неможливо змінити ніяким чином штатними засобами. Я не розглядаю створення нового абонента для усунення помілки.

Був обран такий шлях вирішення проблеми. Заміну функції php explode() знайшов у мережі. Мабуть це станеться в нагоді:

 

diff api.fundsflow.php.bak api.fundsflow.php.new
559c559
<                             $eachfee = explode(' ', $eachline);
---
>                             $eachfee = preg_split("~(?<!\\\\)(?:\\\\{2})*'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'(*SKIP)(*F)|\s+~s" , $eachline);

 

Опубліковано:
26 минут назад, mac сказав:

Здається, після оновлення PHP 7.4 до PHP 8.2 feesharvester припинив працювати:

 


/usr/local/bin/curl "http://127.0.0.1/billing/?module=remoteapi&key={SERIAL}&action=feesharvester"
<br />
<b>Fatal error</b>:  Uncaught TypeError: Unsupported operand types: string - string in {UBPATH}/billing/api/libs/api.fundsflow.php:570
Stack trace:
#0 {UBPATH}/billing/modules/remoteapi/feesharvester.php(22): FundsFlow-&gt;harvestFees('2024-01')
...

 

Невеличке розслідування врешті з'ясувало, що це через наявність пробілу у деяких логінах абонентів. Як так сталося? Тому що інколи був неуважно додан трейлінг пробіл до номеру будинка і цей пробіл потрапив до логіну абоненту. Логін абоненту неможливо змінити ніяким чином штатними засобами. Я не розглядаю створення нового абонента для усунення помілки.

Був обран такий шлях вирішення проблеми. Заміну функції php explode() знайшов у мережі. Мабуть це станеться в нагоді:

 


diff api.fundsflow.php.bak api.fundsflow.php.new
559c559
<                             $eachfee = explode(' ', $eachline);
---
>                             $eachfee = preg_split("~(?<!\\\\)(?:\\\\{2})*'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'(*SKIP)(*F)|\s+~s" , $eachline);

 

 

Логіни з пробілами це сильно ?

Я утримаюсь від коментарів.

  • Haha 1
  • 8 months later...
Опубліковано: (відредаговано)

На жаль, наявність пробілу у деяких логінах абонентів заважає все сильніше. Після останнього оновлення UB до 1.4.7 припинив відображатися профіль абонента.

Замість - помилка : "Підозріла помилка - взагалі дивно, що ви її бачите: EMPTY_DATABASE_USERDATA"

В url передається module=userprofile&username=bad%20login

Мабуть (шановним розробникам видніше) через зміни у коді на кшталт

Цитата

Генерація логінів: нова опція генерації PRFXCONTRACT, що генерує логіни вигляду “Префікс+Наступна вільна угода”.

 

Тож міркую над шляхом вирішення проблеми. Планую:

  1. зупинити залежні сервіси,
  2. зробити sql дамп,
  3. в ньому за допомогою sed змінити всі входження логіну з пробілом на логін з підкресленням (тобто в логіні замість пробілу буде підкреслення _ ),
  4. а потім повернути виправленний sql дамп на місце.

Здається, це не порушить цілісність бази даних.

 

Як вважаєте? У ВМ вже затестив, все Ок, але сумніваюсь щодо можливих проблем у майбутньому

 

P.S. Ні, не Ок, є деякі глюки. Буду розбиратися далі.

P.P.S. Треба було кеш очистити.

Відредаговано mac
Опубліковано:
11 часов назад, mac сказав:

Після останнього оновлення UB до 1.4.7 припинив відображатися профіль абонента.

Насправді воно так задумувалось, ще десь з перших релізів. Тільки було зламано тотально, просто по-різному в різних місцях :)

Надалі, всі логіни повинні та будуть мати наступний вигляд. Тобто a-z0-9A-Z_. Крапку з мене вибили правдами та неправдами. Вона теж під питанням та скоріш за все, тимчасово.

 

11 часов назад, mac сказав:

Як вважаєте? У ВМ вже затестив, все Ок, але сумніваюсь щодо можливих проблем у майбутньому

Вольове рішення, яке є єдиним адекватним і яке я всіляко підтримую :)

 

11 часов назад, mac сказав:

Здається, це не порушить цілісність бази даних.

Якщо все зробити акуратно - все має працювати.

 

Питання тільки в тому, скільки тих абонентів є і чи не дешевше їх руками перереєструвати на ходу.
 

  • Like 1
Опубліковано:
7 часов назад, nightfly сказав:

Насправді воно так задумувалось, ще десь з перших релізів. Тільки було зламано тотально, просто по-різному в різних місцях :)

Надалі, всі логіни повинні та будуть мати наступний вигляд. Тобто a-z0-9A-Z_. Крапку з мене вибили правдами та неправдами. Вона теж під питанням та скоріш за все, тимчасово.

 

Вольове рішення, яке є єдиним адекватним і яке я всіляко підтримую :)

 

Якщо все зробити акуратно - все має працювати.

 

Питання тільки в тому, скільки тих абонентів є і чи не дешевше їх руками перереєструвати на ходу.
 

nightfly, дуже вдячний вам !!!
Все зробив, політ нормальний. Команда sed для зміни в дампі, залишу тут для довідки ?

sed -i.bak 's/my[[:blank:]]login/my_login/g' mybase.sql

 

Є ще один цікавий момент, зроблю окремий топік, щоб без плутанини

  • Thanks 1

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    • Немає користувачів, що переглядають цю сторінку.
×
×
  • Створити нове...