【发布时间】:2021-07-29 18:31:12
【问题描述】:
我收到此错误:Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 67112960 bytes) in C:\xampp\htdocs\... 当我在我的 proto 文件中添加 6 个数组消息时。我正在使用 php protobuf 协议缓冲区进行序列化。
syntax = "proto3";
message data {
.data_step_one test = 2;
}
message data_step_one {
.data_step_two test1 = 1;
}
message data_step_two {
.data_step_three test2 = 2;
}
message data_step_three {
.data_step_four test3 = 2;
}
message data_step_four {
.data_step_five test4 = 14;
}
message data_step_five {
.data_step_six test5 = 1;
}
message data_step_six {
string something = 1;
}
当我从最后六个数组中删除字符串 (string something = 1;) 时
消息数据_step_six { }
它的工作没有那个错误。当我在六条消息中添加一些内容时,我得到了那个错误。我是这个 protobuf 消息的新手,所以不明白问题出在哪里以及我将如何解决它。
更新更多:
这是我的 post 方法的原始数据(我按照这个创建原始消息):
1 {
1: 1
2: 58480067980758310
4: 0
}
2 {
1 {
1: 112
2 {
1: id:a-7769307577821621420
2 {
14 {
1 {
1: mid:b-6430467773153509964
2 {
1: 1
2: mcacc.com
3: Emma Ava
10: mcacc.com
}
3 {
1: 1
2: scssd.com
}
7: 1627577996674
8: Test
9 {
2 {
1: 0
2: <div dir='auto'>This is test.</div>
}
7: 1
}
11: ^a
11: ^all
11: ^f_bt
11: ^f_cl
11: ^f_btns
11: ^pfg
18: 1627577996674
36 {
6: 0
}
37 {
4: 0
}
42: 0
52: s:23cbdb9f4cd2713a|#mid:b-6430467773153509964|0
}
3: 1
}
}
}
}
}
3 {
1: 4
2: 518600
5 {
1: 30
2: 0
}
7: 1
8 {
1: ^wa_ready
1: ^f
1: ^t_z
2: ^r
}
}
4 {
2: 1
3: 1627577996728
4: 1
5: 57
}
5: 2
这是我创建的原始消息:
syntax = "proto3";
message rs_request {
.unknown_int_data unknown_int = 1;
.unknown_int_data1 unknown_int1 = 2;
.unknown_int_data2 unknown_int2 = 3;
.unknown_int_data3 unknown_int3 = 4;
bool unknown_int4 = 5;
}
message unknown_int_data {
bool unint = 1;
fixed32 unknown = 2;
bool unknown1 = 4;
}
message unknown_int_data1 {
.unknown_int_datas unknown2 = 1;
}
message unknown_int_datas {
int32 unknown3 = 1;
.unknown_int_datas1 unknown4 = 2;
}
message unknown_int_datas1 {
string threadaId = 1;
.unknown_int_datass unknowns = 2;
}
message unknown_int_datass {
.unknown_int_datas2 unknown5 = 14;
}
message unknown_int_datas2 {
.unknown_int_datas3 unknown6 = 1;
bool unknown7 = 3;
}
message unknown_int_datas3 {
string msgaId = 1;
.unknown_int_datas4 unknown9 = 2;
.unknown_int_datas5 unknown10 = 3;
fixed32 unknown11 = 7;
string subject = 8;
.unknown_int_datas6 unknown12 = 9;
string unknown13 = 11;
fixed32 unknown14 = 18;
.unknown_int_datas7 unknown15 = 36;
.unknown_int_datas8 unknown16 = 37;
int32 unknown17 = 42;
string unknown18 = 52;
}
message unknown_int_datas4 {
bool unknown19 = 1;
string from_domain = 2;
string from_name = 3;
string from_domain_again = 10;
}
message unknown_int_datas5 {
bool unknown20 = 1;
string to_domain = 2;
}
message unknown_int_datas6 {
.unknown_int_datas9 unknown21 = 2;
bool unknown22 = 7;
}
message unknown_int_datas9 {
bool unknown23 = 1;
string msg = 2;
}
message unknown_int_datas7 {
bool unknown24 = 6;
}
message unknown_int_datas8 {
bool unknown25 = 4;
}
message unknown_int_data2 {
bool unknowsthree = 1;
uint32 unknowsthree1 = 2;
.unknowsthree_data unknowsthree2 = 5;
bool unknowsthree3 = 7;
.unknowsthree_datas unknowsthree4 = 8;
}
message unknowsthree_data {
int32 unknowsthree5 = 1;
bool unknowsthree6 = 2;
}
message unknowsthree_datas {
string unknowsthree7 = 1;
string unknowsthree8 = 2;
}
message unknown_int_data3 {
bool unknown26 = 2;
fixed32 unknown27 = 3;
bool unknown28 = 4;
int32 unknown29 = 5;
}
这是post的请求模型json(mcRequestModel.php):
"unknown_int1" => [
"unknown2" => [
"unknown4" => [
"unknowns" => [
"unknown5" => [
"unknown6" => [
"unknown9" => [
"from_domain" => "mcacc.com",
"from_name" => "Emma Ava",
"from_domain_again" => "mcacc.com"
],
"unknown10" => [
"to_domain" => "scssd.com"
],
"subject" => "Test",
"unknown12" => [
"unknown21" => [
"msg" => "<div dir='auto'>This is test.</div>"
]
]
]
]
]
]
]
]
尝试使用 php-protobuf 获取缓冲区编译器:
$mcRequest = new mcRequestModel();
$class = new \rs_request();
$class->parseFromJsonStream($mcRequest);
var_dump($class);
当我从数组unknown_int_datas3 中删除所有数据时,我得到了缓冲区编译器数组更大的输出,但当不从unknown_int_datas3 中删除数据时,我没有得到编译器输出,而只是得到Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 67112960 bytes) in C:\xampp\htdocs\...
【问题讨论】: