borodul
Новичок
Здравствуйте, коллеги!
Вчера с заказчиком столкнулись с незадачей. Кратко: CMS == Drupal 6, интернет-магазин на UberCart, я писал модуль интеграции с системой "Купивкредит" (от банка "Тинькофф" которая).
В нашем модуле все реализовано следующим образом: на стадии подтверждения заказа формируется анкета, в которую подставляется номер заявки в банке (уникальная строка, в общем случае - результат работы функции time(), у нас - комбинация функции time() и номера заказа в магазине по принципу $orderNumber = sprintf("%s-%s", ${номер заказа}, base_convert(time(), 10, 36)), а одновременно с этим в таблицу в базе данных номер заявки привязывается к номеру заказа. Сделано это было для того, чтобы потом мы могли с помощью API, предоставляемого банком, проверять сделанные заказы в автоматическом режиме.
Специально хочу отметить, что переменная $orderNumber была определена всего один раз, а далее скрипт работает только с полученным ее значением. По крайней мере, я так думал.
На тестовом сервере все работало нормально (огрехи были, конечно, куда без этого, но то были МОИ огрехи, я их быстро находил и устранял). Когда же мы перенесли модуль на "боевой" сайт, выяснилось, что все работает как-то не так. Еще через некоторое время выяснилось, что работает-то все хорошо, вот только в базу данных и в банк летят разные значения $orderNumber. Да какие разные! Отличались они чаще всего одной буквой, последней, так что мы не сразу и заметили, в чем дело. Реже - двумя последними. Как будто значения вычислялись с разницей в несколько секунд, но ведь я же определил эту переменную только один раз! Как такое может быть внутри одной области видимости?
Убрал из определения переменной base_convert, оставил просто time (base_convert был придуман для подсокращения таймстемпа, заказчик ворчал, что строка длинная, неудобно ему было, видите ли). Но я все равно не понимаю, как такое возможно?! Если я присвоил переменной некоторое вычисленное значение, сделал это всего один раз и в одном месте кода, а потом просто подставляю переменную в нужные мне места, то как, черт побери, КАК в разных местах получаются разные значения переменной????
Я очень надеюсь, что я не одинок в своих несчастьях (потому что когда заказ на самом финише не сдается из-за таких вот кренделей - это счастьем никак нельзя назвать), и у кого-то подобная ситуация была, либо она где-то уже описана. Просто я за почти 10 лет кодинга на PHP с таким встречаюсь впервые.
Вчера с заказчиком столкнулись с незадачей. Кратко: CMS == Drupal 6, интернет-магазин на UberCart, я писал модуль интеграции с системой "Купивкредит" (от банка "Тинькофф" которая).
В нашем модуле все реализовано следующим образом: на стадии подтверждения заказа формируется анкета, в которую подставляется номер заявки в банке (уникальная строка, в общем случае - результат работы функции time(), у нас - комбинация функции time() и номера заказа в магазине по принципу $orderNumber = sprintf("%s-%s", ${номер заказа}, base_convert(time(), 10, 36)), а одновременно с этим в таблицу в базе данных номер заявки привязывается к номеру заказа. Сделано это было для того, чтобы потом мы могли с помощью API, предоставляемого банком, проверять сделанные заказы в автоматическом режиме.
Специально хочу отметить, что переменная $orderNumber была определена всего один раз, а далее скрипт работает только с полученным ее значением. По крайней мере, я так думал.
На тестовом сервере все работало нормально (огрехи были, конечно, куда без этого, но то были МОИ огрехи, я их быстро находил и устранял). Когда же мы перенесли модуль на "боевой" сайт, выяснилось, что все работает как-то не так. Еще через некоторое время выяснилось, что работает-то все хорошо, вот только в базу данных и в банк летят разные значения $orderNumber. Да какие разные! Отличались они чаще всего одной буквой, последней, так что мы не сразу и заметили, в чем дело. Реже - двумя последними. Как будто значения вычислялись с разницей в несколько секунд, но ведь я же определил эту переменную только один раз! Как такое может быть внутри одной области видимости?
Убрал из определения переменной base_convert, оставил просто time (base_convert был придуман для подсокращения таймстемпа, заказчик ворчал, что строка длинная, неудобно ему было, видите ли). Но я все равно не понимаю, как такое возможно?! Если я присвоил переменной некоторое вычисленное значение, сделал это всего один раз и в одном месте кода, а потом просто подставляю переменную в нужные мне места, то как, черт побери, КАК в разных местах получаются разные значения переменной????
Я очень надеюсь, что я не одинок в своих несчастьях (потому что когда заказ на самом финише не сдается из-за таких вот кренделей - это счастьем никак нельзя назвать), и у кого-то подобная ситуация была, либо она где-то уже описана. Просто я за почти 10 лет кодинга на PHP с таким встречаюсь впервые.