'mysql', 'database_name' => 'host117523_temp', 'server' => 'localhost', 'username' => 'host117523_temp', 'password' => 'XAGwZ3XRa9fgtM63um7v', 'charset' => 'utf8' ]); // Otwórz plik XML do odczytu if (!$reader->open('googleProducts.xml')) { die("Failed to open the XML file"); } // Liczba wszystkich elementów `item` $totalItems = 0; while ($reader->read()) { if ($reader->nodeType == XMLReader::ELEMENT && $reader->localName == 'item') { $totalItems++; } } $reader->close(); // Otwórz ponownie plik XML do przetwarzania $reader->open('googleProducts.xml'); // Otwórz plik tymczasowy XML do zapisu $tempFile = 'googleProducts_temp.xml'; $writer->openURI($tempFile); $writer->startDocument('1.0', 'UTF-8'); $writer->setIndent(true); // Dodanie przestrzeni nazw $writer->startElement('rss'); $writer->writeAttribute('version', '2.0'); $writer->writeAttribute('xmlns:g', 'http://base.google.com/ns/1.0'); $writer->startElement('channel'); // Inicjalizacja zmiennych $products = []; $skipFirstItems = 1000; $processedItems = 0; $hasMoreItems = false; // Przeczytaj XML strumieniowo while ($reader->read()) { if ($reader->nodeType == XMLReader::ELEMENT && $reader->localName == 'item') { if ($processedItems < $skipFirstItems) { // Przetwórz elementy `item` do momentu przekroczenia limitu `skipFirstItems` $product = []; $depth = $reader->depth; $processedItems++; while ($reader->read() && !($reader->nodeType == XMLReader::END_ELEMENT && $reader->depth == $depth)) { if ($reader->nodeType == XMLReader::ELEMENT) { $currentElement = $reader->name; $namespaceURI = $reader->namespaceURI; } elseif ($reader->nodeType == XMLReader::TEXT || $reader->nodeType == XMLReader::CDATA) { if (!isset($product[$currentElement])) { $product[$currentElement] = ''; } $product[$currentElement] .= $reader->value; } } // Dodaj produkt do listy produktów $products[] = $product; } else { $hasMoreItems = true; // Przepisywanie pozostałych elementów `item` $writer->startElement('item'); $depth = $reader->depth; while ($reader->read() && !($reader->nodeType == XMLReader::END_ELEMENT && $reader->depth == $depth)) { if ($reader->nodeType == XMLReader::ELEMENT) { $writer->startElement($reader->name); if ($reader->hasAttributes) { while ($reader->moveToNextAttribute()) { $writer->writeAttribute($reader->name, $reader->value); } $reader->moveToElement(); } } elseif ($reader->nodeType == XMLReader::TEXT) { $writer->text($reader->value); } elseif ($reader->nodeType == XMLReader::CDATA) { $writer->writeCData($reader->value); } elseif ($reader->nodeType == XMLReader::END_ELEMENT) { $writer->endElement(); } } $writer->endElement(); } } elseif ($reader->nodeType == XMLReader::ELEMENT && $reader->localName != 'rss' && $reader->localName != 'channel') { // Przepisywanie elementów XML poza przetworzonymi 'item' oraz pomijanie 'rss' i 'channel' $writer->startElement($reader->name); if ($reader->hasAttributes) { while ($reader->moveToNextAttribute()) { $writer->writeAttribute($reader->name, $reader->value); } $reader->moveToElement(); } } elseif ($reader->nodeType == XMLReader::TEXT) { $writer->text($reader->value); } elseif ($reader->nodeType == XMLReader::CDATA) { $writer->writeCData($reader->value); } elseif ($reader->nodeType == XMLReader::END_ELEMENT && $reader->localName != 'rss' && $reader->localName != 'channel') { $writer->endElement(); } } // Zakończ elementy $writer->endElement(); // channel $writer->endElement(); // rss // Zakończ dokument $writer->endDocument(); $writer->flush(); // Zamknij oba pliki $reader->close(); // Podmiana oryginalnego pliku tymczasowym if (!rename($tempFile, 'googleProducts.xml')) { die("Failed to replace the original XML file"); } // echo '
' . print_r($products, true) . ''; // Wyświetl produkty i zapisz do bazy danych $addedProducts = 0; foreach ($products as $product) { $productId = $product['g:id']; // Sprawdź, czy produkt już istnieje w bazie danych $existingProduct = $mdb->get('dekodum_xml', '*', ['product_id' => $productId]); if (!$existingProduct) { $addedProducts++; // Jeśli produkt nie istnieje, dodaj go do bazy danych $mdb->insert('dekodum_xml', [ 'product_id' => $productId, 'title' => $product['title'], 'link' => $product['link'], 'image_link' => $product['g:image_link'], 'mpn' => $product['g:mpn'], 'brand' => $product['g:brand'], 'google_product_category' => $product['g:google_product_category'], 'item_group_id' => $product['g:item_group_id'], ]); } } $remainingItems = $totalItems - $processedItems; echo "Pierwsze $skipFirstItems elementów 'item' zostało odczytanych. Dodałem $addedProducts produktów. Pozostało $remainingItems elementów do przetworzenia."; // Odśwież stronę, jeśli są jeszcze elementy 'item' if ($hasMoreItems) { echo ''; }