read multiple html files

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Djekkie nevachna

djekkie nevachna

01/09/2013 11:33:41
Quote Anchor link
Hello members,

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$file_handle
= fopen("myfiles/file1.html", "r");
while (!feof($file_handle)) {
   $line = fgets($file_handle);
   echo $line;
}

fclose($file_handle);
?>

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$file_handle
= fopen("myfiles/*.html", "r");
while (!feof($file_handle)) {
   $line = fgets($file_handle);
   echo $line;
}

fclose($file_handle);
?>


The * above represents all .html files
 
PHP hulp

PHP hulp

14/11/2024 18:25:11
 
Jack Maessen

Jack Maessen

01/09/2013 14:42:22
Quote Anchor link
Use the glob() function;
Try this:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
foreach (glob("myfiles/*.html") as $file) {
    $file_handle = fopen($file, "r");
    while (!feof($file_handle)) {
        $line = fgets($file_handle);
        echo $line;
    }
}

fclose($file_handle);
?>


This should do the trick
Gewijzigd op 01/09/2013 14:43:28 door Jack Maessen
 
Eddy E

Eddy E

01/09/2013 15:42:07
Quote Anchor link
En gebruik dan file_get_contents().

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$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
 
Ozzie PHP

Ozzie PHP

01/09/2013 16:20:46
Quote Anchor link
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.

In de foreach wordt glob toch ook maar 1x uitgevoerd?
 
Tim van Norde

Tim van Norde

01/09/2013 23:24:15
Quote Anchor link
Eddy E op 01/09/2013 15:42:07:
En gebruik dan file_get_contents().

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
$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.


foreach(glob()) zal gewoon werken.
Dubbele post weggehaald[/modedit]
Gewijzigd op 01/09/2013 23:36:44 door Nick Dijkstra
 
Eddy E

Eddy E

02/09/2013 08:03:32
Quote Anchor link
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?

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?
 
Ozzie PHP

Ozzie PHP

02/09/2013 13:54:59
Quote Anchor link
Eddy, geen idee wat je bedoelt. Misschien weet iemand anders dit?

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.
 
Kris Peeters

Kris Peeters

02/09/2013 14:58:19
Quote Anchor link
Ik weet niet goed wat hier het beste is.

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
 
Ozzie PHP

Ozzie PHP

02/09/2013 15:32:19
Quote Anchor link
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.

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.
 
Kris Peeters

Kris Peeters

02/09/2013 15:39:18
Quote Anchor link
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.
 
LEDfan nvt

LEDfan nvt

02/09/2013 15:48:50
 
Kris Peeters

Kris Peeters

02/09/2013 15:51:03
Quote Anchor link
Ja, dat is dus al 1 oefening die we niet meer zelf moeten doen.
 
Ozzie PHP

Ozzie PHP

02/09/2013 15:53:09
Quote Anchor link
Thanks LEDfan :)

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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.