Может ли $ _SERVER ['remote_port'] влиять на успешность запроса MySQL? - PullRequest
1 голос
/ 24 августа 2011

У меня очень странная проблема с веб-сайтом электронной коммерции: некоторые запросы, но не все, по обновлению статусов заказов по какой-то таинственной причине не выполняются.

При успешной оплате покупателем платежный шлюз вызывает в интернет-магазине php-скрипт, который должен обновить соответствующий статус заказа (с «ожидающий» до «подтвержденный»).

Это работает в некоторых случаях, но не в других. Я заметил, что шаблон order_status_update () работает, когда URL-адрес обратного вызова вызывается с определенного IP-адреса (и соответствующего порта), но не с другого.

Я просмотрел код и проинструктировал его кучей журналирования, и все проверили до уровня запроса, но в одном случае это работает, а в другом случае - нет.

Единственное отличие, которое я вижу:

1) IP-адрес сервера, вызывающего скрипт обратного вызова,
2) удаленный порт сервера, вызывающего скрипт обратного вызова.

Насколько я знаю, вызов $ _SERVER ['REMOTE_ADDR']] не должен иметь никакого значения для выполнения чего-либо (если, конечно, скрипт явно не делает что-то соответственно, а это не так), поэтому я ' Интересно, может ли $ _SERVER ['REMOTE_PORT'] повлиять на MySQL / базу данных, что может привести к сбою запроса?

При успешном выполнении скрипта / запроса значение REMOTE_PORT равно 18436, а при сбое REMOTE_PORT - 49495.

Я прикрепил регистрацию из двух заказов, первый успешно, а второй не удалось - вы можете видеть, что они фактически идентичны (за исключением order_id и mdate, как и ожидалось)

Когда это работает:

nab_notify - вызов order_status_update с помощью d [] =: Array \ n (\ n [order_id] => 2860 \ n [order_status] => C \ n [notify_customer] => Y \ n) \ n ps_order :: order_status_update - d [] = Array \ n (\ n [order_id] => 2860 \ n [order_status] => C \ n [notify_customer] => Y \ n) \ n ps_order :: order_status_update - curr_order_status: order_status: C notify_customer: 1 ps_order :: order_status_update - ОБНОВЛЕНИЕ vm_orders (1) w / fields [] = Массив \ n (\ n [order_status] => C \ n [mdate] => 1314093024 \ n) \ n ps_order :: order_status_update - ОБНОВЛЕНИЕ vm_orders (2) order_id: [2860] ps_order :: order_status_update - ОБНОВЛЕНИЕ vm_orders (3) ЗАПРОС: [ОБНОВЛЕНИЕ #__vm_orders SET order_status = 'C', \ n mdate = '1314093024' \ nГДЕ order_id = '2860'] ps_order :: order_status_update - ОБНОВЛЕНИЕ vm_orders (4) qresult: [1]

Когда это не работает:

nab_notify - calling order_status_update with d[]=:Array\n(\n    [order_id] => 2863\n    [order_status] => C\n    [notify_customer] => Y\n)\n
ps_order::order_status_update - d[]=Array\n(\n    [order_id] => 2863\n    [order_status] => C\n    [notify_customer] => Y\n)\n
ps_order::order_status_update - curr_order_status:   order_status:C   notify_customer:1
ps_order::order_status_update - UPDATE vm_orders (1) w/fields[]=Array\n(\n    [order_status] => C\n    [mdate] => 1314137858\n)\n
ps_order::order_status_update - UPDATE vm_orders (2) order_id:[2863]
ps_order::order_status_update - UPDATE vm_orders (3) QUERY:[UPDATE `#__vm_orders` SET `order_status` = 'C',\n`mdate` = '1314137858'\nWHERE order_id='2863']
ps_order::order_status_update - UPDATE vm_orders (4) qresult:[0]

Учитывая "тот же" запрос, может ли кто-то пролить свет на то, почему один потерпит неудачу, тогда как другой преуспеет?

Спасибо, Эрик

ОБНОВЛЕНИЕ 1: Я добавил протоколирование уровня запросов и обнаружил некоторые ошибки, журналы показывают:

ОШИБКА 2006 - Сервер MySQL пропал

... но, как ни странно, не для всех запросов в этом конкретном сеансе (угадайте, что обнадеживает?). Я оставил разрывы строк в следах на случай, если у них есть подшипник.

Я после пары поисков и других сообщений на форуме проверил настройки php и вижу

max_execution_time = 60
max_input_time = 60

какое время должно быть достаточно?

Что странно, так это то, что это происходит только тогда, когда запрос к определенному URL-адресу выполняется с определенного IP-адреса (на этот раз тот же IP-адрес, что и в случае, когда статусы других заказов не обновлялись).

2011-08-25  02:54:48    -   JDatabaseMySQL::query - SQL=SELECT `order_number`, `user_id`, `order_subtotal`,
                `order_total`, `order_currency`, `order_tax`, 'order_status', 
                `order_shipping_tax`, `coupon_discount`, `order_discount`
            FROM `jos_vm_orders` 
            WHERE `order_id`='2868'
2011-08-25  02:54:48    -   JDatabaseMySQL::query - !!!! ERROR !!!! 2006 - MySQL server has gone away SQL=SELECT `order_number`, `user_id`, `order_subtotal`,
                `order_total`, `order_currency`, `order_tax`, 'order_status', 
                `order_shipping_tax`, `coupon_discount`, `order_discount`
            FROM `jos_vm_orders` 
            WHERE `order_id`='2868'
2011-08-25  02:54:48    -   JDatabaseMySQL::query - SQL=SELECT user_id,order_total,order_status FROM jos_vm_orders WHERE jos_vm_orders.order_id='2868'
2011-08-25  02:54:48    -   JDatabaseMySQL::query - !!!! ERROR !!!! 2006 - MySQL server has gone away SQL=SELECT user_id,order_total,order_status FROM jos_vm_orders WHERE jos_vm_orders.order_id='2868'
2011-08-25  02:54:48    -   JDatabaseMySQL::query - SQL=UPDATE `jos_vm_orders` SET `order_status` = 'C',
`mdate` = '1314240914'
WHERE order_id='2868'
2011-08-25  02:54:48    -   JDatabaseMySQL::query - !!!! ERROR !!!! 2006 - MySQL server has gone away SQL=UPDATE `jos_vm_orders` SET `order_status` = 'C',
`mdate` = '1314240914'
WHERE order_id='2868'
2011-08-25  02:54:48    -   JDatabaseMySQL::query - SQL=INSERT INTO `jos_vm_order_history` (`order_id`,
`order_status_code`,
`date_added`,
`customer_notified`,
`comments`) VALUES (
'2868'
,'C'
,'2011-08-25 12:25:14'
,'1'
,''
)
2011-08-25  02:54:48    -   JDatabaseMySQL::query - !!!! ERROR !!!! 2006 - MySQL server has gone away SQL=INSERT INTO `jos_vm_order_history` (`order_id`,
`order_status_code`,
`date_added`,
`customer_notified`,
`comments`) VALUES (
'2868'
,'C'
,'2011-08-25 12:25:14'
,'1'
,''
)
2011-08-25  02:54:48    -   JDatabaseMySQL::query - SQL=SELECT order_item_id, event_reg_id FROM jos_vm_order_item WHERE order_id=2868
2011-08-25  02:54:48    -   JDatabaseMySQL::query - !!!! ERROR !!!! 2006 - MySQL server has gone away SQL=SELECT order_item_id, event_reg_id FROM jos_vm_order_item WHERE order_id=2868
2011-08-25  02:54:48    -   JDatabaseMySQL::query - SQL=SELECT id FROM jos_menu WHERE link='index.php?option=com_virtuemart' AND published=1
2011-08-25  02:54:48    -   JDatabaseMySQL::query - !!!! ERROR !!!! 2006 - MySQL server has gone away SQL=SELECT id FROM jos_menu WHERE link='index.php?option=com_virtuemart' AND published=1
2011-08-25  02:54:48    -   JDatabaseMySQL::query - SQL=SELECT vendor_name,contact_email FROM jos_vm_vendor WHERE vendor_id='1'
2011-08-25  02:54:48    -   JDatabaseMySQL::query - !!!! ERROR !!!! 2006 - MySQL server has gone away SQL=SELECT vendor_name,contact_email FROM jos_vm_vendor WHERE vendor_id='1'
2011-08-25  02:54:48    -   JDatabaseMySQL::query - SQL=SELECT first_name,last_name,user_email,order_status_name,country,order_currency FROM jos_vm_order_user_info,jos_vm_orders,jos_vm_order_status WHERE jos_vm_orders.order_id = '2868' AND jos_vm_orders.user_id = jos_vm_order_user_info.user_id AND jos_vm_orders.order_id = jos_vm_order_user_info.order_id AND order_status = order_status_code
2011-08-25  02:54:48    -   JDatabaseMySQL::query - !!!! ERROR !!!! 2006 - MySQL server has gone away SQL=SELECT first_name,last_name,user_email,order_status_name,country,order_currency FROM jos_vm_order_user_info,jos_vm_orders,jos_vm_order_status WHERE jos_vm_orders.order_id = '2868' AND jos_vm_orders.user_id = jos_vm_order_user_info.user_id AND jos_vm_orders.order_id = jos_vm_order_user_info.order_id AND order_status = order_status_code
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...