Okay. Men kan du ikke lade PHP-delen returnere (echo'e) hvor langt den er / om der mangler mere?
Så kan du lave en JavaScript-funktion, der kalder PHP-delen og kalder sig selv igen, indtil den er færdig med at behandle XML-filen.
Jeg har lavet et mockup af, hvordan det evt. kan laves med brug af jQuery. Jeg har ikke testet det.
- var processXml = function (progress) {
-
- // hvor langt er vi i XML filen
- progress = progress || 'beginning of xml'; // udskift 'beginning of xml' med et eller andet, der fortæller php-delen, at den skal begynde fra starten af XML-filen
-
- $.post("processXml.php", { 'progress': progress }, function(data) {
- // lad PHP-delen echo'e "done", hvis hele XML-filen er behandlet, ellers echo hvor langt vi er i filen
- if (data !== 'done') {
- // der er stadig noget tilbage i XML-filen, så vi laver et nyt HTTP POST request (kalder vores funktion igen med den opdaterede progress)
- processXml(data);
- } else {
- // hele XML-filen er behandlet
- }
- });
-
- };
PHP-delen skal så tage en lille bid af XML-filen hver gang. Skal benytte $_POST['progress'] til at vurdere, hvorfra den skal starte/fortsætte i XML-filen.
---- edit
Jeg kan af dit redigerede indlæg se, at vi har taget to forskellige indgangsvinkler.
I mit tilfælde vil jeg have en side til at køre en JavaScript-funktion, der kalder en anden side (en PHP-side), som klarer hele processeringen (indlæsning af filen og finder det punkt, hvor den skal behandle fra).
I dit tilfælde har du en side, som indlæser filen og splitter den op, og sender en del af XML-filen til en anden PHP side, som kun behandler denne lille del. Din PHP-side (dataproc.php) bliver altså udsat for et noget mindre workload, som i stedet lægges på den side, hvor JavaScripten er.
For at kommentere på din kode:
Du kan ikke indhente en JavaScript variabel til et stykke PHP-kode på samme side. Som jeg ser det, har du 2 muligheder.
1) Udskrive din $xmlfilearray i dit JavaScript som et JavaScript-array (med PHP-funktionen json_encode()). Dette er nok en dårlig løsning, da man ikke ønsker en kæmpe XML-fil liggende i sit JavaScript (siden kan blive for stor at hente).
2) Du undlader at sende en XML-streng til dataproc.php og sender i stedet information omkring, hvilken del af XML-filen der skal behandles (som i mit eksempel).
Min indgangsvinkel har nogle andre udfordringer, fx omkring at workloaded ikke må blive for stort. Det plejer dog ikke være det at indlæse filen, der er krævende, men mere den behandling du foretager af hver sektion (fx indsættelse i database el.lign.). Hvis du benytter nogle af PHP's XML-biblioteker i stedet for at manuelt splitte filen, så tror jeg, at du har større chance for at komme i land uden at støde på memory eller timeout begrænsninger.
Indlæg senest redigeret d. 14.11.2014 23:31 af Bruger #4879