read multiple html files
First of all i want to apologize for using english language.
But i prefer english instead of dutch if you don't mind.
My question: is there a possibility to read multiple html files into a PHP file?
I now use this code for reading the content from a file:
Code (php)
But this gives me only the content of file1.html
So i was wondering if it is possible to do something like this:
Code (php)
The * above represents all .html files
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$files = glob("myfiles/*.html");
foreach($files as $file)
{
echo file_get_contents($file);
}
?>
$files = glob("myfiles/*.html");
foreach($files as $file)
{
echo file_get_contents($file);
}
?>
Door de glob() in een variabele te gooien voer je hem maar 1x uit.
Sneller en geheugen-vriendelijker.
Ps: je kan dit bericht ook in Google Translate naar Engels vertalen.
Gewijzigd op 02/09/2013 08:02:31 door Eddy E
Eddy E op 01/09/2013 15:42:07:
Door de glob() in een variabele te gooien voer je hem maar 1x uit.
Sneller en geheugen-vriendelijker.
Door de glob() in een variabele te gooien voer je hem maar 1x uit.
Sneller en geheugen-vriendelijker.
In de foreach wordt glob toch ook maar 1x uitgevoerd?
Eddy E op 01/09/2013 15:42:07:
En gebruik dan file_get_contents().
Door de glob() in een variabele te gooien voer je hem maar 1x uit.
Sneller en geheugen-vriendelijker.
Ps: je kan dit bericht ook in Google Translate naar Engels vertalen.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
$files = glob("myfiles/*.html");
foreach($files as $file)
{
echo file_get_contents($file);
}
?>
foreach($files as $file)
{
echo file_get_contents($file);
}
?>
Door de glob() in een variabele te gooien voer je hem maar 1x uit.
Sneller en geheugen-vriendelijker.
Ps: je kan dit bericht ook in Google Translate naar Engels vertalen.
foreach(glob()) zal gewoon werken.
Dubbele post weggehaald[/modedit]
Gewijzigd op 01/09/2013 23:36:44 door Nick Dijkstra
Of is/was dat dan bij een while-loop?
Toevoeging op 02/09/2013 08:03:52:
Ik herinner mij een topic waarin werd aangeraden dit soort variabelen vooraf te pakken (en niet in de loop) omdat ze dan maar 1x uitgevoerd worden en niet steeds opnieuw, maar dat PHP wel de pointer verplaatst.
Of is/was dat dan bij een while-loop?
Volgens mij wordt glob() slechts 1x uitgevoerd en worden de resultaten middels de foreach-loop doorlopen. Jouw voorstel om de resultaten van glob() eerst in een variabele te stoppen is dus contraproductief. Het is niet sneller en neemt juist meer geheugen in beslag. Tenminste... dat is wat ik er van denk. Wellicht kan iemand anders dit bevestigen of ontkennen.
Ozzie PHP op 02/09/2013 13:54:59:
... Volgens mij wordt glob() slechts 1x uitgevoerd en worden de resultaten middels de foreach-loop doorlopen. ...
Dat lijkt me ook, ja.
Trouwens; makkelijk te testen. Maak zelf een functie glob2(), die gewoon glob() teruggeeft, maar ergens een teller laat lopen (bv. met session).
Steek die glob2() in de foreach.
Dan zal je zien dat de teller maar 1 keer verhoogd wordt, als je hier gelijk hebt.
---
Nu, wat er ook gebeurt...
Een functie die een array terug geeft, steekt die array in het geheugen; op een bepaald adres.
Een variabele is weinig meer dan een vertaling van een human readable naam naar een plek in het geheugen.
Ik denk:
als je
$files = glob("myfiles/*.html");
doet, dan krijgt $files de pointer terug naar het stuk geheugen dat sowieso is aangemaakt, door de functie.
Ik denk niet dat de data zelf dubbel in het geheugen komt.
Dus de tussenstap $files = glob("myfiles/*.html"); zorgt gewoon dat je een extra variabele krijgt (die je later eventueel nog kan aaspreken); maar veel negatiefs zie ik niet.
Als iemand meer weet dan ik, hoor ik het graag aanvullingen/verbeteringen/rechtzettingen.
Gewijzigd op 02/09/2013 14:59:04 door Kris Peeters
Kris Peeters op 02/09/2013 14:58:19:
Ik denk:
als je
$files = glob("myfiles/*.html");
doet, dan krijgt $files de pointer terug naar het stuk geheugen dat sowieso is aangemaakt, door de functie.
Ik denk niet dat de data zelf dubbel in het geheugen komt.
als je
$files = glob("myfiles/*.html");
doet, dan krijgt $files de pointer terug naar het stuk geheugen dat sowieso is aangemaakt, door de functie.
Ik denk niet dat de data zelf dubbel in het geheugen komt.
De functie zal denk ik inderdaad een stukje geheugen aanmaken waarin de resultaten van glob() worden opgeslagen. Echter, als je deze resultaten eerst in een variabele stopt, zijn ze na uitvoering van de foreach-loop nog steeds beschikbaar. De resultaten nemen dus geheugen in beslag, terwijl er niks meer mee wordt gedaan. Als je de glob() method in de foreach loop zelf gebruikt, zullen de resultaten na het uitvoeren van de foreach loop worden gewist uit het geheugen. Tenminste... dat neem ik aan. Dus door het gebruik van een extra variabele verbruik je onnodig geheugen. Dat is hoe ik erover denk.
Ozzie PHP op 02/09/2013 15:32:19:
... als je deze resultaten eerst in een variabele stopt, zijn ze na uitvoering van de foreach-loop nog steeds beschikbaar. De resultaten nemen dus geheugen in beslag,
Niet als je dit alles in een functie steekt.
Eens de functie verlaten wordt, wordt al die ruimte vrij gegeven.
(nog eens herhalen wat ik wel vaker zeg:)
Mensen moeten veel vlugger blokken code in functies steken.
Ja, dat is dus al 1 oefening die we niet meer zelf moeten doen.
Kris, klopt dat het na uitvoering van een functie/method gewist wordt, maar tot die tijd is er dus sprake van extra geheugenverbruik. Stelt dat veel voor? Nee vast niet. Maar feit is wel dat het onnodig is en het dus geen enkele meerwaarde heeft om de resultaten van glob() eerst in een variabele te stoppen.