我有一个非常奇怪的问题。我在基于zend框架的商店工作。我正在创建与某些拍卖服务的集成(allegro.pl)。我需要通过肥皂下载所有项目。在我的功能完成工作后,我得到了#34; MySQL服务器已经消失了#34;。
这是我的代码:
private function getProducts()
{
$items = [];
$filterOptions = /* doesn't matter for this question */;
$allegroItems = $this->allegro->getCore()->doGetItemsList(0, 1, $filterOptions, 3, null);
$itemsCount = $allegroItems->itemsCount;
$perPage = 1000;
$maxPage = ceil(round($itemsCount, 0) / $perPage);
for ($i = 0; $i < $maxPage; $i++) {
$allegroItems = $this->allegro->getCore()->doGetItemsList($perPage * $i, $perPage, $filterOptions, 3, null)->itemsList->item;
if (!is_array($allegroItems)) {
$allegroItems = [$allegroItems];
}
foreach ($allegroItems as $item) {
$items[(string)$item->itemId] = $item;
}
}
return $items;
}
目前有大约3000件物品。当我下载超过2500-3000个项目时,我收到错误(没有计算确切的数字)。如果我将$ perPage设置为1,100或1000并不重要。它不依赖于执行时间 - 我可以设置睡眠(100)并下载1000个没有错误的产品。就在这个函数的最后一行之前,我可以毫无问题地调用任何数据库查询,但是当框架内置的函数尝试更新任务表时,我会收到错误。
错误似乎不依赖于任何东西......不是执行时间(时间是~30秒,它在睡眠时工作正常(100)),而不是内存限制(我可以在每个循环中取消设置变量或设置内存限制到1GB,没有帮助),而不是肥皂功能的执行时间(尽管需要几分钟,一个接一个地下载2000个项目工作正常)。对我来说最奇怪的是 - 像我说的那样,db查询在最后一行之前就在函数内部工作。
我没有使用清晰的zend框架,但是&#34; shoper&#34;这是基于zend。
有什么想法吗?
答案 0 :(得分:1)
问题在于BLOB数据。增加max_allowed_packet解决了它。但是我不知道那个BLOB是什么以及我的函数如何影响它因为我把它写成完全独立的函数: - )