Тайм-аут запроса проблемы для цикла с CURL - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть такой скрипт:

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 sku занял слишком много времени и время ожидания возврата (просто работает для проверки продукта 100 sku).

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

Мой вопрос

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

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

1 Ответ

0 голосов
/ 26 сентября 2018

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

В файле php.ini:

max_execution_time=500

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

memory_limit = 256M

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

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