веб-сервисы — Ошибка сегментации в SOAP после обновления PHP с v5.4.45 до v5.6.21

Я получаю ошибку сегментации после обновления PHP с версии v5.4.45 до v5.6.21. Я прочитал документацию по обновлению PHP, и нет никаких упоминаний о каких-либо серьезных изменениях в SOAP.

Я проверил это в тестовой среде, которая имеет те же версии. Однако в нашей производственной среде это не удается. Неудачный вызов говорит с сервисом SOAP и использует SoapClient в PHP.

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

Версии программного обеспечения, работающего на сервере (как в тестовой, так и в производственной среде):

  • PHP 5.6.21
  • MySQL 5.5.49 MySQL Community Server (GPL) by Remi
  • CentOS: centos-release-6-6.el6.centos.12.2.x86_64

Трассировка стека с отладочными символами:

Program terminated with signal 11, Segmentation fault.
#0  master_to_zval_int (encode=0x2d9, data=0x7fb62db0aee0) at /usr/src/debug/php-5.6.21/ext/soap/php_encoding.c:585
585             if (encode->to_zval) {
#1  0x00007fb6167d04f2 in model_to_zval_object (ret=0x7fb62ebc4738, model=0x7fb62fba4ca8, data=0x7fb62fbdac50, sdl=0x7fb62db91f30) at /usr/src/debug/php-5.6.21/ext/soap/php_encoding.c:1403
#2  0x00007fb6167d01f6 in model_to_zval_object (ret=0x7fb62ebc4738, model=0x7fb62fba4c28, data=0x7fb62fbdac50, sdl=0x7fb62db91f30) at /usr/src/debug/php-5.6.21/ext/soap/php_encoding.c:1459
#3  0x00007fb6167d0877 in to_zval_object_ex (type=<value optimized out>, data=0x7fb62fbdac50, pce=<value optimized out>) at /usr/src/debug/php-5.6.21/ext/soap/php_encoding.c:1589
#4  0x00007fb6167ce163 in master_to_zval_int (encode=0x7fb62e7836f0, data=0x7fb62fbdac50) at /usr/src/debug/php-5.6.21/ext/soap/php_encoding.c:586
#5  0x00007fb6167d04f2 in model_to_zval_object (ret=0x7fb62ebc4340, model=0x7fb62fba49e8, data=0x7fb62fbdabd0, sdl=0x7fb62db91f30) at /usr/src/debug/php-5.6.21/ext/soap/php_encoding.c:1403
#6  0x00007fb6167d01f6 in model_to_zval_object (ret=0x7fb62ebc4340, model=0x7fb62fba4968, data=0x7fb62fbdabd0, sdl=0x7fb62db91f30) at /usr/src/debug/php-5.6.21/ext/soap/php_encoding.c:1459
#7  0x00007fb6167d0877 in to_zval_object_ex (type=<value optimized out>, data=0x7fb62fbdabd0, pce=<value optimized out>) at /usr/src/debug/php-5.6.21/ext/soap/php_encoding.c:1589
#8  0x00007fb6167ce163 in master_to_zval_int (encode=0x7fb62e783738, data=0x7fb62fbdabd0) at /usr/src/debug/php-5.6.21/ext/soap/php_encoding.c:586
#9  0x00007fb6167e32df in parse_packet_soap (this_ptr=<value optimized out>, buffer=<value optimized out>, buffer_size=<value optimized out>, fn=0x7fb62f990b80, fn_name=<value optimized out>, return_value=0x7fb62ebc6428, soap_headers=0x0) at /usr/src/debug/php-5.6.21/ext/soap/php_packet_soap.c:328
#10 0x00007fb6167c37e8 in do_soap_call (this_ptr=0x7fb62ebbe470, function=<value optimized out>, function_len=<value optimized out>, arg_count=1, real_args=0x7fb62fa1b750, return_value=0x7fb62ebc6428, location=0x7fb62db932b8 "https://winorgws.flt.no/prod/srv/wsWebUser.asmx", soap_action=<value optimized out>, call_uri=<value optimized out>, soap_headers=0x0, output_headers=0x0) at /usr/src/debug/php-5.6.21/ext/soap/soap.c:2780
#11 0x00007fb6167c41ec in zim_SoapClient___call (ht=<value optimized out>, return_value=0x7fb62ebc6428, return_value_ptr=<value optimized out>, this_ptr=0x7fb62ebbe470, return_value_used=<value optimized out>) at /usr/src/debug/php-5.6.21/ext/soap/soap.c:2950
#12 0x00007fb62102ab69 in dtrace_execute_internal (execute_data_ptr=<value optimized out>, fci=<value optimized out>, return_value_used=<value optimized out>) at /usr/src/debug/php-5.6.21/Zend/zend_dtrace.c:97
#13 0x00007fb62102d904 in zend_call_function (fci=0x7fffc3a8b840, fci_cache=<value optimized out>) at /usr/src/debug/php-5.6.21/Zend/zend_execute_API.c:849
#14 0x00007fb6210535c7 in zend_call_method (object_pp=0x7fffc3a8b960, obj_ce=<value optimized out>, fn_proxy=0x7fb62d7c2d88, function_name=0x7fb6211417f2 "__call", function_name_len=<value optimized out>, retval_ptr_ptr=0x7fffc3a8b978, param_count=2, arg1=0x7fb62ebc6368, arg2=0x7fb62ebc63c8) at /usr/src/debug/php-5.6.21/Zend/zend_interfaces.c:97
#15 0x00007fb621065ae2 in zend_std_call_user_call (ht=<value optimized out>, return_value=0x7fb62ebc3dc0, return_value_ptr=0x7fb62c4108a0, this_ptr=0x7fb62ebbe470, return_value_used=<value optimized out>) at /usr/src/debug/php-5.6.21/Zend/zend_object_handlers.c:931
#16 0x00007fb62102ab69 in dtrace_execute_internal (execute_data_ptr=<value optimized out>, fci=<value optimized out>, return_value_used=<value optimized out>) at /usr/src/debug/php-5.6.21/Zend/zend_dtrace.c:97
#17 0x00007fb6210b9b15 in zend_do_fcall_common_helper_SPEC (execute_data=<value optimized out>) at /usr/src/debug/php-5.6.21/Zend/zend_vm_execute.h:560
#18 0x00007fb6210a95e8 in execute_ex (execute_data=0x7fb62c410d18) at /usr/src/debug/php-5.6.21/Zend/zend_vm_execute.h:363
#19 0x00007fb62102ac9e in dtrace_execute_ex (execute_data=0x7fb62c410d18) at /usr/src/debug/php-5.6.21/Zend/zend_dtrace.c:73
#20 0x00007fb6210ba184 in zend_do_fcall_common_helper_SPEC (execute_data=<value optimized out>) at /usr/src/debug/php-5.6.21/Zend/zend_vm_execute.h:592
#21 0x00007fb6210a95e8 in execute_ex (execute_data=0x7fb62c4106d0) at /usr/src/debug/php-5.6.21/Zend/zend_vm_execute.h:363
#22 0x00007fb62102ac9e in dtrace_execute_ex (execute_data=0x7fb62c4106d0) at /usr/src/debug/php-5.6.21/Zend/zend_dtrace.c:73
#23 0x00007fb6210ba184 in zend_do_fcall_common_helper_SPEC (execute_data=<value optimized out>) at /usr/src/debug/php-5.6.21/Zend/zend_vm_execute.h:592
#24 0x00007fb6210a95e8 in execute_ex (execute_data=0x7fb62c410218) at /usr/src/debug/php-5.6.21/Zend/zend_vm_execute.h:363
#25 0x00007fb62102ac9e in dtrace_execute_ex (execute_data=0x7fb62c410218) at /usr/src/debug/php-5.6.21/Zend/zend_dtrace.c:73
#26 0x00007fb62102d703 in zend_call_function (fci=0x7fffc3a8c070, fci_cache=<value optimized out>) at /usr/src/debug/php-5.6.21/Zend/zend_execute_API.c:829
#27 0x00007fb620f7db57 in zif_call_user_func_array (ht=<value optimized out>, return_value=0x7fb62fa20608, return_value_ptr=<value optimized out>, this_ptr=<value optimized out>, return_value_used=<value optimized out>) at /usr/src/debug/php-5.6.21/ext/standard/basic_functions.c:4786
#28 0x00007fb62102ab69 in dtrace_execute_internal (execute_data_ptr=<value optimized out>, fci=<value optimized out>, return_value_used=<value optimized out>)
#29 0x00007fb6210b9b15 in zend_do_fcall_common_helper_SPEC (execute_data=<value optimized out>) at /usr/src/debug/php-5.6.21/Zend/zend_vm_execute.h:560
#30 0x00007fb6210a95e8 in execute_ex (execute_data=0x7fb62c40fb28) at /usr/src/debug/php-5.6.21/Zend/zend_vm_execute.h:363
#31 0x00007fb62102ac9e in dtrace_execute_ex (execute_data=0x7fb62c40fb28) at /usr/src/debug/php-5.6.21/Zend/zend_dtrace.c:73
#32 0x00007fb6210ba184 in zend_do_fcall_common_helper_SPEC (execute_data=<value optimized out>) at /usr/src/debug/php-5.6.21/Zend/zend_vm_execute.h:592
#33 0x00007fb6210a95e8 in execute_ex (execute_data=0x7fb62c40f398) at /usr/src/debug/php-5.6.21/Zend/zend_vm_execute.h:363
#34 0x00007fb62102ac9e in dtrace_execute_ex (execute_data=0x7fb62c40f398) at /usr/src/debug/php-5.6.21/Zend/zend_dtrace.c:73
#35 0x00007fb6210ba184 in zend_do_fcall_common_helper_SPEC (execute_data=<value optimized out>) at /usr/src/debug/php-5.6.21/Zend/zend_vm_execute.h:592
#36 0x00007fb6210a95e8 in execute_ex (execute_data=0x7fb62c40eff8) at /usr/src/debug/php-5.6.21/Zend/zend_vm_execute.h:363
#37 0x00007fb62102ac9e in dtrace_execute_ex (execute_data=0x7fb62c40eff8) at /usr/src/debug/php-5.6.21/Zend/zend_dtrace.c:73
#38 0x00007fb6210ba184 in zend_do_fcall_common_helper_SPEC (execute_data=<value optimized out>) at /usr/src/debug/php-5.6.21/Zend/zend_vm_execute.h:592
#39 0x00007fb6210a95e8 in execute_ex (execute_data=0x7fb62c40e6c8) at /usr/src/debug/php-5.6.21/Zend/zend_vm_execute.h:363
#40 0x00007fb62102ac9e in dtrace_execute_ex (execute_data=0x7fb62c40e6c8) at /usr/src/debug/php-5.6.21/Zend/zend_dtrace.c:73
#41 0x00007fb62103a3ec in zend_execute_scripts (type=8, retval=0x0, file_count=3) at /usr/src/debug/php-5.6.21/Zend/zend.c:1341
#42 0x00007fb620fd885a in php_execute_script (primary_file=0x7fffc3a8ec80) at /usr/src/debug/php-5.6.21/main/main.c:2613
#43 0x00007fb6210e15fd in php_handler (r=0x7fb62d8a9188) at /usr/src/debug/php-5.6.21/sapi/apache2handler/sapi_apache2.c:667
#44 0x00007fb62c504cd0 in ap_run_handler (r=0x7fb62d8a9188) at /usr/src/debug/httpd-2.2.15/server/config.c:158
#45 0x00007fb62c50858e in ap_invoke_handler (r=0x7fb62d8a9188) at /usr/src/debug/httpd-2.2.15/server/config.c:376
#46 0x00007fb62c513c50 in ap_process_request (r=0x7fb62d8a9188)
#47 0x00007fb62c510ac8 in ap_process_http_connection (c=0x7fb62d7fc1d8) at /usr/src/debug/httpd-2.2.15/modules/http/http_core.c:190
#48 0x00007fb62c50c7d8 in ap_run_process_connection (c=0x7fb62d7fc1d8) at /usr/src/debug/httpd-2.2.15/server/connection.c:43
#49 0x00007fb62c518ad7 in child_main (child_num_arg=<value optimized out>) at /usr/src/debug/httpd-2.2.15/server/mpm/prefork/prefork.c:667
#50 0x00007fb62c518dea in make_child (s=0x7fb62d35a880, slot=2) at /usr/src/debug/httpd-2.2.15/server/mpm/prefork/prefork.c:763
#51 0x00007fb62c51911b in startup_children (_pconf=<value optimized out>, plog=<value optimized out>, s=<value optimized out>) at /usr/src/debug/httpd-2.2.15/server/mpm/prefork/prefork.c:781
#52 ap_mpm_run (_pconf=<value optimized out>, plog=<value optimized out>, s=<value optimized out>) at /usr/src/debug/httpd-2.2.15/server/mpm/prefork/prefork.c:1002
#53 0x00007fb62c4f09b0 in main (argc=1, argv=0x7fffc3a8f248) at /usr/src/debug/httpd-2.2.15/server/main.c:763

Может ли кто-нибудь помочь мне в правильном направлении, чтобы узнать, что не так, или сказать мне, что не так, если вы знаете? Есть ли другие различия, которые могут создать эту проблему? Например файл PHP.ini? Я знаю, что есть разница в настройке date.timezone, например.

Обновление 1:

Мне удалось пройтись по файлу трассировки и выяснить, что сервер получил ожидаемый ответ. Это где-то, когда он пытается разобрать ответ, который он терпит неудачу. Насколько я знаю, документ может быть неверным. Я думаю, что более высокая вероятность того, что что-то не так в документе или что код приложения неправильный, чем ошибка в самом PHP.

Обновление 2:

При доступе к локальным переменным разных фреймов я вижу, что мы получаем действительный ответ SOAP с сервера. По крайней мере, теперь мы знаем, что сервер отвечает так, как должен. Таким образом, ошибка возникает после того, как мы получили ответ, и похоже, что это происходит, когда библиотека пытается проанализировать ответ.

Доступ к кадру № 9 дает нам это:

#9  0x00007fb6167e32df in parse_packet_soap (this_ptr=<value optimized out>, buffer=<value optimized out>, buffer_size=<value optimized out>, fn=0x7fb62f990b80, fn_name=<value optimized out>, return_value=0x7fb62ebc6428, soap_headers=0x0) at /usr/src/debug/php-5.6.21/ext/soap/php_packet_soap.c:328
param = 0x7fb62fba65a0
val = <value optimized out>
tmp = <value optimized out>
h_param = 0x7fb62fba65e8
name = <value optimized out>
ns = 0x7fb62fba52d8 "http://www.winorg.no/webservices"fnb = 0x7fb62f990678
res_count = 1
envelope_ns = 0x7fb600000000 <Address 0x7fb600000000 out of bounds>
response = 0x7fb62db0aaa0
trav = <value optimized out>
env = <value optimized out>
head = <value optimized out>
body = <value optimized out>
resp = 0x7fb62fbdabd0
cur = <value optimized out>
fault = <value optimized out>
attr = <value optimized out>
param_count = 0
soap_version = <value optimized out>
hdrs = 0x0

Доступ к кадру № 10 (последний кадр кода приложения) дает нам это:

#10 0x00007fb6167c37e8 in do_soap_call (this_ptr=0x7fb62ebbe470, function=<value optimized out>, function_len=<value optimized out>, arg_count=1, real_args=0x7fb62fa1b750, return_value=0x7fb62ebc6428, location=0x7fb62db932b8 "https://winorgws.flt.no/prod/srv/wsWebUser.asmx", soap_action=<value optimized out>, call_uri=<value optimized out>, soap_headers=0x0, output_headers=0x0) at /usr/src/debug/php-5.6.21/ext/soap/soap.c:2780
uri = 0x7fb6210138d0
action = <value optimized out>
__orig_bailout = 0x7fffc3a8b460
__bailout = {{__jmpbuf = {0, 6085802679289766135, 0, 140420459902800, 140420459902808, 140736476001800,
-6085882503037591305, -6117803975593172745}, __mask_was_saved = 0, __saved_mask = {__val = {0, 140420218837248,
1, 140736476001456, 0, 2, 0, 256, 140420214706271, 140736476001852, 1, 140736476001520, 0, 140420218837248, 0,
140420218837824}}}}
__orig_bailout = 0x7fffc3a8d980
__bailout = {{__jmpbuf = {140420444841072, 6085802679289766135, 0, 140420459902800, 140420459902808, 140736476001800,
-6085882503037591305, -6117803975453187849}, __mask_was_saved = 0, __saved_mask = {__val = {140420214708469,
206158430248, 140736476001696, 140736476001488, 140420403240512, 140420218837248, 140420427649664,
140736476001856, 140736476001868, 140736476001824, 140736476001848, 140736476001552, 140420444873432,
140420444873672, 140736476001760, 140420215755228}}}}
tmp = 0x7fb62ebc1ad8
trace = 0x7fb621435900
sdl = 0x7fb62db91f30
old_sdl = 0x0
fn = <value optimized out>
request = <value optimized out>
ret = 1
soap_version = 2
response = {value = {lval = 140420461530552, dval = 6.9376926015418089e-310, str = {
val = 0x7fb62fba8db8 "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSch"...,
len = 7635}, ht = 0x7fb62fba8db8, obj = {handle = 800755128, handlers = 0x1dd3}, ast = 0x7fb62fba8db8},
refcount__gc = 1, type = 6 '\006', is_ref__gc = 0 '\000'}
old_encoding = 0x0
old_class_map = 0x0
old_features = 0
old_typemap = 0x0
typemap = <value optimized out>
_old_handler = 0 '\000'
_old_error_code = 0x0
_old_error_object = 0x0
_old_soap_version = 1
_old_in_compilation = 0 '\000'
_old_in_execution = 1 '\001'
_old_current_execute_data = 0x7fffc3a8b720
_old_stack_top = 0x7fb62c410e88
_bailout = 0

Здесь мы видим, что у нас действительно есть ответ. Я не буду публиковать полный ответ здесь, поскольку он содержит конфиденциальные данные.

Я также вижу, что ответ так или иначе избежал обратной косой черты. Я думаю, это нормально. Это?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector