Ik heb een rij met artikelnummers, en daarmee kan ik informatie opvragen (in XML) bij een andere website. Deze informatie sla ik op in mijn eigen database, maar er komen regelmatig nieuwe artikelen bij, en dat houdt in dat ik soms vele artikelen tegelijkertijd moet importeren. Ik doe dit met een file_get_contents in een loop, maar als het teveel artikelen zijn, geeft mijn script logischerwijze een timeout. Hoe voorkom ik dit?
Het makkelijkste is natuurlijk om de timeout van php aan te passen:
De vraag is, hoe krijg ik dat voor elkaar? Of is er een betere manier voor?
Ik laat in het kort zien wat ik nu heb, en wat bij veel files een timeout geeft:
Het makkelijkste is natuurlijk om de timeout van php aan te passen:
PHP:
maar dit wil ik niet. Het makkelijkste is denk ik een script dat de xml-file van 1 artikel ophaalt en verwerkt, en als dat klaar is, automatisch opnieuw opstart en dan het volgende artikel ophaalt, totdat ze allemaal geweest zijn. Ik kan dan ook iets van feedback op het scherm zetten met hoe ver hij al is (bijvoorbeeld: importeren: 3/120), zonder dat ik mij bezig hoef te houden met streaming-technieken.1
| ini_set('default_socket_timeout', 900); |
De vraag is, hoe krijg ik dat voor elkaar? Of is er een betere manier voor?
Ik laat in het kort zien wat ik nu heb, en wat bij veel files een timeout geeft:
PHP:
1
2
3
4
5
6
7
8
9
| $objectids = array(); // is een lijst met artikelnummers foreach ($objectids as $artikelnr) { $url = "https://www.externeurl.com/xmlapi/article?id=". $artikelnr; $file = file_get_contents($url); $xml = simplexml_load_string($file); // vervolgens wordt de xml-file verwerkt en worden de gegevens in de eigen database gezet } |