Тайм-аут запроса проблемы для цикла с CURL

У меня есть сценарий, как это:

function getNewProductToEcommerce($merk, $shopID){
    // assuming I have called a database connection
    -----------------------------------------------
    $conn = intialitationDB();
    -----------------------------------------------
    $sql = "select * from tablebarang where merk = '".$merk."'";
    $result = mysqli_query($conn, $sql);
    $addNewProducts = array();
    foreach($result as $products){
        $tempSKU = searchEcommerceProducts($products['sku'], $shopID);

        if($tempSKU === false){
            $newProducts['sku'] = $products['sku'];
            $newProducts['catID'] = getCatIdEcommerece($merk, $products['sku']);
            $images = getPhotosSomeWebsite($merk, $products['sku']);
            for($i=1; $i <= 5; $i++){
                if(isset($images[$i-1])) $img = 'https://somewebsite.com/file/'.$images[$i-1];
                else $img = '';

                $newProducts['images_'.$i] = $img;
            }
            $addNewProducts['sku'][] = $products['sku'];
            $addNewProducts['item'][] = $newProducts;
        }
        // Markup
        // In here i should respone to user one by one, but i cannot because 
        i just need respone just some variable
    }
    return $addNewProducts;
    mysqli_close($conn);
}

function searchEcommerceProducts($sku, $shopID){
    $q = str_replace(" ","%2B", $sku);
    $url = "https://somewebsite.com/search/product?shop_id=$shopID&ob=11&rows=80&start=0&device=desktop&source=shop_product&q=$q";
    $html = file_get_contents($url);
    $html = json_decode($html, true);
    if($html["header"]["total_data"] >= 1) return true;
    else return false;
}

function getCatIdEcommerece($merk, $sku){
    $merk = str_replace(" ","%2B",$merk);
    $sku = str_replace(" ","%2B",$sku);
    $search = $merk . "%2B" . $sku;
    $url = "https://somesite.com/search/product/v3?scheme=https&device=desktop&catalog_rows=0&rows=1&source=search&ob=23&st=product&q=".$search."&sc=0&user_id=470833&rows=60&unique_id=35e66d287a5d4cefb1a674678be311f4";
    $html = file_get_contents($url);
    $html = json_decode($html, true);

    if (isset($html['data']['products'][0]['url'])){
        $url = $html['data']['products'][0]['url'];
        $cat_id = after_last ("catid%3D", $url);
    }else $cat_id = '';

    return $cat_id;
}

function getPhotosSomeWebsite($merk, $sku){
    $search = str_replace(' ','%20',$merk.' '.$sku);
    // assuming I have called a function name theCURL
    -----------------------------------------------
    $getFoto = theCURL("https://somesite.com/search_items/?by=relevancy&keyword=$search&limit=1&match_id=16775174&newest=0&order=desc&page_type=shop&__classic__=1",'GET','');
    -----------------------------------------------

    $getFoto = json_decode($getFoto, true);
    $items = $getFoto['items'];
    if(!empty($items)){
        $idProduct = $items[0]["itemid"];
        $getFoto = theCURL("https://somesite.com/item/get?itemid=$idProduct&shopid=16775174&__classic__=1",'GET','');
        $getFoto = json_decode($getFoto, true);
        return $getFoto['item']['images'];
    } else return null;
}

Пояснение:

Во-первых: мне нужно получить переменную SKU, CategoryID, ImagesURL на моем веб-сайте, где я не вводил товар в свой магазин, поэтому мне не нужно проверять двойной товар / дубликат товара.

Второе: я вызываю функцию getNewProductToEcommerce() из другого класса и просто вернуть переменную SKU, CategoryID, ImagesURL в массиве. Мне нужно сохранить товар в xlsx.

Эта проблема:

В цикле я просто хочу получить какой-нибудь продукт, в котором я не вводил товар в свой магазин, но в цикле для 1000 единиц товара потребовалось слишком много времени и возвращался тайм-аут запроса (просто для проверки 100 единиц товара).

Я дублировал скрипт, используя echo в цикле, потому что он прекрасно работает для этого продукта 1000 sku, но когда я передаю функцию, это не может быть и возвращает ошибку "заголовки уже отправлены заголовком".

Мой вопрос

Как я могу получить функцию возврата для многих продуктов, не получая сообщение об ошибке "заголовки уже отправлены по заголовку" или время запроса в моей проблеме?

Я очень благодарен, если кто-то может помочь мне в этом вопросе, спасибо.

1 ответ

Ошибка "Заголовки уже отправлены" возникает из-за того, что PHP печатает некоторые ошибки или предупреждения перед отправкой заголовков. Найдите, какая ошибка происходит. Скорее всего, это проблема времени ожидания выполнения php в вашем случае, поэтому попробуйте увеличить ограничение времени выполнения в файле конфигурации php в соответствии с вашими потребностями:

В файле php.ini:

max_execution_time=500

Также для ограничения памяти:

memory_limit = 256M

Если у вас нет достаточных привилегий для этого, вы можете попытаться выполнить свои операции пакетно, как задачу cron.

Другие вопросы по тегам