У меня есть сценарий, как это:
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, но когда я передаю функцию, это не может быть и возвращает ошибку «заголовки уже отправлены заголовком».
Мой вопрос
Как я могу получить функцию возврата для многих продуктов, не получая сообщение об ошибке «заголовки уже отправлены по заголовку» или время запроса в моей проблеме?
Я очень благодарен, если кто-то может помочь мне в этом вопросе, спасибо.
‘Заголовки уже отправлены‘ошибка возникает из-за того, что PHP печатает некоторые ошибки или предупреждения перед отправкой заголовков. Найдите, какая ошибка возникает. Скорее всего, это проблема времени ожидания выполнения php в вашем случае, поэтому попробуйте увеличить ограничение времени выполнения в файле конфигурации php в соответствии с вашими потребностями:
В файле php.ini:
max_execution_time=500
Также для ограничения памяти:
memory_limit = 256M
Если у вас нет достаточных привилегий для этого, вы можете попытаться выполнить свои операции пакетно, как задачу cron.
Других решений пока нет …