Shopify SDK - постраничный запрос, вызывающий утечки памяти - PullRequest
0 голосов
/ 10 апреля 2020

В настоящее время я разрабатываю приложение для интеграции с shopify, и только что попробовал SDK из Shopify SDK, затем я попытался создать функцию для получения заказа с разбивкой на страницы, например, как показано ниже

public function getAllOrders(){

// $config is the array that containing accesstoken, password and domain url of shopify store
$shopify = new ShopifySDK($config);
        $filters = [
            'limit' => 250,
            'financial_status' => 'paid',
            'fulfillment_status' => 'unfulfilled',
            'created_at_min ' => '2020-04-09',
            'created_at_max' => '2020-04-10'
        ];
        $orders_resource = $shopify->Order();
        $orders = $orders_resource->get($filters);
        $next_page = $orders_resource->getNextPageParams();
        while ($next_page) {
            $next_page_orders = $orders_resource->get($orders_resource->getNextPageParams());
            $orders = array_merge($orders, $next_page_orders);
            $next_page = $orders_resource->getNextPageParams();
        }
        return $orders;

}

Но это дает мне утечки памяти, вместо того, чтобы возвращать ответ, это дает мне PHP Неустранимая ошибка: допустимый объем памяти 1073741824 байт исчерпан (попытался выделить 1679360 байт)

Я прочитал совет по настройке или настройке лимита памяти в php .ini, но я думаю, что это совсем не хорошо, потому что это заставит сервер принять любой размер его запроса, есть ли передовая практика для чего-то подобного или для ограничения страницы запроса или данных ответа? Любой совет будет признателен

Ответы [ 2 ]

0 голосов
/ 11 апреля 2020

Это не способ сделать это. Shopify больше не поддерживает пейджинговую рекламу и много месяцев велел всем не делать этого. 1 апреля должен был стать концом этого паттерна. Теперь вы получаете свой ресурс с помощью вызова, а затем проверяете заголовки, есть ли еще данные для получения. Вы используете этот шаблон, четко описанный Shopify. Таким образом, даже если вы запустили этот старый код, он скоро станет для вас бесполезным. Читайте о новом образце.

0 голосов
/ 11 апреля 2020

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

public function getAllOrders(){

// $config is the array that containing accesstoken, password and domain url of $shopify = new ShopifySDK($config);
        $filters = [
            'limit' => 250,
            'financial_status' => 'paid',
            'fulfillment_status' => 'unfulfilled',
            'created_at_min ' => '2020-04-10T13:00:00-07:00' //adding time specifically
        ];
        $orders_resource = $shopify->Order();
        $orders = $orders_resource->get($filters);
        $next_page = $orders_resource->getNextPageParams();
        $page = 1;
        while ($next_page) {
            if ($page > 5) { // adding condition for stop after 5 page for escaping memory exhausted
                break;
            }else{
                $next_page_orders = $orders_resource->get($next_page);
                $orders = array_merge($orders, $next_page_orders);
                $next_page = $orders_resource->getNextPageParams();
                $page++;
            }
        }
        return $orders;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...