【发布时间】:2021-10-10 18:14:15
【问题描述】:
public static function send()
{
$products = Product::where('active', 1)->get(['id_product', 'price', 'reference'])->load(['images', 'lang']);
// loop for all products and sending to API
$number_of_products = count($products);
$start = 0;
$end = 70;
for ($a = 0; $a < ceil($number_of_products/70); $a++) {
for ($i = $start; $i < $end; $i++) {
// loop for all images in product
$count = count($products[$i]->images);
for ($k = 0; $k < $count; $k++) {
$id = (string)$products[$i]->images[$k]->id_image;
$products[$i]->images[$k]->id_image = 'https://somesite.com/img/p';
$length = strlen($id);
// loop for every digit of id_image
for ($d = 0; $d < $length; $d++) {
$products[$i]->images[$k]->id_image = $products[$i]->images[$k]->id_image . '/' . $id[$d];
}
$products[$i]->images[$k]->id_image = $products[$i]->images[$k]->id_image . '/' . $id . ".jpg";
$images[] = $products[$i]->images[$k]->id_image;
}
$products[$i]->images[0] = $images;
$product = [
'code' => $products[$i]->reference,
'name' => $products[$i]->lang->name,
'price' => round(($products[$i]->price) * 13200, -2),
'quantity' => 1,
'description' => $products[$i]->lang->description,
'images' => $products[$i]->images[0],
'url' => 'https://avtech.uz/ru/' . $products[$i]->id_product . '-' . $products[$i]->lang->link_rewrite . '.html',
];
$array_of_products[] = $product;
}
// Send 50 products to API
$response = Http::withToken('token')->post('https://example.com/upload', [
'company_id' => ******,
'products' => $array_of_products
]);
if ($response->failed()) {
Log::channel('send_products_to_pc')->info('Failed: ', [$response]);
} else {
Log::channel('send_products_to_pc')->info('Success: ', [$response]);
}
$start = $start + 70;
$end = $end + 70;
}
}
请帮忙!什么以及如何使此功能成功运行。 在 Postman 中获取“504 网关超时” “允许的内存大小为 134217728 字节已用尽” - 在 laravel.log 中。 我不想增加 memory_limit 因为可能会发生内存泄漏,并且我的脚本无法在 60 秒内发送 1300 个产品。在日志中我可以看到只发送了 500-600 个产品,然后给出了上述错误。
【问题讨论】: