[PHP/WP] Import methode zoals WP All Import

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Maxman1850
  • Registratie: Augustus 2009
  • Niet online
Ik heb een WordPress plugin geschreven die een .csv uitleest en op basis hiervan producten (in WooCommerce) aanpast. Het enige wat nodig is uit de csv zijn twee kolommen: SKU en prijs.

Op het moment gebruik ik hiervoor het volgende stukje om de csv uit te lezen en in een array te plaatsen:

PHP:
1
$products = array_map(function($a){return str_getcsv($a, $delimiter);}, explode("\n", $result));


Vervolgens gebruik ik een foreach() om ieder product te updaten.

Op deze manier werkt het prima, echter kan het zijn dat de maximum tijd overschreden wordt doordat er een grote csv (20.000+ lines, vaak met meerdere kolommen dan nodig zijn) wordt gebruikt.

Mijn vraag is: wat is de aanpak om het net als WP All Import de import altijd goed te laten verlopen, zonder dat de tijd overschreden wordt en zonder dat ik teveel memory gebruik.

Alle reacties


Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
20.000+ regels is echt niet veel of groot ofzo.
Heb hier soms bestanden van 500 MB en dat zijn heel veel regels :)

gebruik fopen() om het bestand te openen
loop met fgetcsv() door elke regel
in de loop:
- verwerk het product
- gebruik eventueel set_time_limit()

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • mbe81
  • Registratie: Juni 2008
  • Laatst online: 17:46
Als ik dit zo lees verwacht id dat probleem zit in het feit dat je 20.000 individuele updates uitvoert die allemaal individueel gecommit worden.
Een oplossing zou dan kunnen zijn om de updates binnen één transactie uit te voeren en deze transactie aan het eind in zijn geheel te committen.
Als dit niet afdoende is zou je ook een tabel in het formaat van de CSV kunnen maken. Je kan dan in één keer de CSV inladen (load data in file) en vervolgens in één update de wijzigingen verwerken.