mac Опубликовано: 12 січня, 2024 Опубликовано: 12 січня, 2024 Здається, після оновлення 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->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);
nightfly Опубліковано: 12 січня, 2024 Опубліковано: 12 січня, 2024 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->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); Логіни з пробілами це сильно ? Я утримаюсь від коментарів. 1
mac Опубліковано: 20 вересня, 2024 Автор Опубліковано: 20 вересня, 2024 (відредаговано) На жаль, наявність пробілу у деяких логінах абонентів заважає все сильніше. Після останнього оновлення UB до 1.4.7 припинив відображатися профіль абонента. Замість - помилка : "Підозріла помилка - взагалі дивно, що ви її бачите: EMPTY_DATABASE_USERDATA" В url передається module=userprofile&username=bad%20login Мабуть (шановним розробникам видніше) через зміни у коді на кшталт Цитата Генерація логінів: нова опція генерації PRFXCONTRACT, що генерує логіни вигляду “Префікс+Наступна вільна угода”. Тож міркую над шляхом вирішення проблеми. Планую: зупинити залежні сервіси, зробити sql дамп, в ньому за допомогою sed змінити всі входження логіну з пробілом на логін з підкресленням (тобто в логіні замість пробілу буде підкреслення _ ), а потім повернути виправленний sql дамп на місце. Здається, це не порушить цілісність бази даних. Як вважаєте? У ВМ вже затестив, все Ок, але сумніваюсь щодо можливих проблем у майбутньому P.S. Ні, не Ок, є деякі глюки. Буду розбиратися далі. P.P.S. Треба було кеш очистити. Відредаговано 20 вересня, 2024 mac
nightfly Опубліковано: 21 вересня, 2024 Опубліковано: 21 вересня, 2024 11 часов назад, mac сказав: Після останнього оновлення UB до 1.4.7 припинив відображатися профіль абонента. Насправді воно так задумувалось, ще десь з перших релізів. Тільки було зламано тотально, просто по-різному в різних місцях Надалі, всі логіни повинні та будуть мати наступний вигляд. Тобто a-z0-9A-Z_. Крапку з мене вибили правдами та неправдами. Вона теж під питанням та скоріш за все, тимчасово. 11 часов назад, mac сказав: Як вважаєте? У ВМ вже затестив, все Ок, але сумніваюсь щодо можливих проблем у майбутньому Вольове рішення, яке є єдиним адекватним і яке я всіляко підтримую 11 часов назад, mac сказав: Здається, це не порушить цілісність бази даних. Якщо все зробити акуратно - все має працювати. Питання тільки в тому, скільки тих абонентів є і чи не дешевше їх руками перереєструвати на ходу. 1
mac Опубліковано: 21 вересня, 2024 Автор Опубліковано: 21 вересня, 2024 7 часов назад, nightfly сказав: Насправді воно так задумувалось, ще десь з перших релізів. Тільки було зламано тотально, просто по-різному в різних місцях Надалі, всі логіни повинні та будуть мати наступний вигляд. Тобто a-z0-9A-Z_. Крапку з мене вибили правдами та неправдами. Вона теж під питанням та скоріш за все, тимчасово. Вольове рішення, яке є єдиним адекватним і яке я всіляко підтримую Якщо все зробити акуратно - все має працювати. Питання тільки в тому, скільки тих абонентів є і чи не дешевше їх руками перереєструвати на ходу. nightfly, дуже вдячний вам !!! Все зробив, політ нормальний. Команда sed для зміни в дампі, залишу тут для довідки ? sed -i.bak 's/my[[:blank:]]login/my_login/g' mybase.sql Є ще один цікавий момент, зроблю окремий топік, щоб без плутанини 1
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас