Вы должны использовать строки в PHP для эмуляции байтовых массивов.Вы даже можете использовать синтаксис $str[index]
со строками.В противном случае у вас ОГРОМНЫЕ издержки (4x или 8x в зависимости от размера int, полезной нагрузки плюс накладные расходы хеш-таблицы).
Я не очень знаком с преобразованиями типов, которые делает расширение SOAP, но вместо этого использует строкувероятно будет работать.
РЕДАКТИРОВАТЬ: Только что проверил источники:
if (Z_TYPE_P(data) == IS_STRING) {
str = php_base64_encode((unsigned char*)Z_STRVAL_P(data), Z_STRLEN_P(data), &str_len);
text = xmlNewTextLen(str, str_len);
xmlAddChild(ret, text);
efree(str);
}
Так что он уже делает кодировку base 64 для вас.
РЕДАКТИРОВАТЬ 2: [СПЕКУЛЯЦИЯ]
Ваш 5-байтовый длинный результат из-за преобразования в строку, которая соответствует приведенному выше коду:
if (Z_TYPE_P(data) == IS_STRING) {
...
} else {
zval tmp = *data;
zval_copy_ctor(&tmp);
convert_to_string(&tmp);
str = php_base64_encode((unsigned char*)Z_STRVAL(tmp), Z_STRLEN(tmp), &str_len);
text = xmlNewTextLen(str, str_len);
xmlAddChild(ret, text);
efree(str);
zval_dtor(&tmp);
}
В результате преобразования получается "Массив" длиной 5 байтов.