ugrás a tartalomhoz

File_get_content Vs Fread

tóthika · 2013. Júl. 5. (P), 13.44
Sziasztok!

Nemrég jutott eszembe, hogy vajon mi lehet a különbség az fopen-fread-fclose kombináció és a file_get_contents között.
Melyik a gyorsabb?
Vagy melyik a jobb szerintetek?
 
1

Más felhasználás

Poetro · 2013. Júl. 5. (P), 13.58
Ha a fájl teljes tartalma kell, akkor file_get_contents, ha folyamatában akarod valamiért feldolgozni, vagy mondjuk keresel benne valamit, akkor pedig fread.
2

Mondjuk én eddig vagy

tóthika · 2013. Júl. 5. (P), 14.24
Mondjuk én eddig vagy file_get_contents-et használtam ezekre, vagy freadet.
Nem is hittem volna, hogy máshol használják fel a kettőt. De azért köszönöm! :)
3

Gondolkozz

Poetro · 2013. Júl. 5. (P), 14.50
Mondjuk van egy 2Mb-os fájlunk, és nekünk kell belőle az a 3 sor, aminek az első betűje A. Ehhez te beolvasnád az egész fájlt memóriába, vagy inkább csak addig haladnál, amíg meg nem találtad, amit keresel?
6

Illetve ha az a 2Mb-os

kuka · 2013. Júl. 5. (P), 15.28
Illetve ha az a 2Mb-os állomány nem változik állandóan, lehet hozzá csinálni egy mutatót, amely feltünteti, hogy hol találhatóak az „A” kezdőbetűjű sorok. Akkor fseek()-kel közvetlenül oda ugrasz és kizárólag csak a szükséges sorokat olvasod be.
4

Ez egy jó kérdés!

aztek · 2013. Júl. 5. (P), 15.04
a hasonlóságok ellenére egészen más dolog a kettő, de ha csak az egyiket szeretnéd elsajátítani, akkor a fopen/fread vonalat ajánlom, bár kétségkívül kényelmesebb a file_get_contents..

fread()

nyit egy file-handlert (fopen), amely jelzi a programnak, hogy tevékenységet fogunk végezni a fájllal, így betölt egy mutatót a memóriába az adott elérési úttal.. arra figyelni kell, hogy ezt műveletek után le kell zárni, fel kell szabadítani a memóriát (fclose), különben elkanászodik - :)

ha adatokat szeretnénk kinyerni a fájlból, akkor azt megtehetjük byte alapon (fread), illetve soronként (fgets), hogy csak a két legfontosabbat említsem, de lehetőség van CSV feldolgozásra is (fgetcsv) és ezeken túl rengeteg lehetőség van még..

file_get_contents()

megpróbálja megnyitni a fájlt (akár URL-en keresztül is ha nincs letiltva a beállításokban, alapértelmezettként nincs), majd visszatér a teljes tartalommal, ami egy string lesz..

teljesen automata, bizonyos esetekben nagyon kényelmes, ha például egy kis konfigurációs vagy cache fájlt kell beolvasni, ami nem túl nagy..

ha hatalmas fájlokkal szeretnénk dolgozni, amit már nem bírna a fizikai memória egyszerre vagy optimalizálni szeretnénk a folyamat futási idejét, akkor mindenképp az előző módszert használnám, vannak esetek (több 100 MB-os szinkron XML-ek) amikor elkerülhetetlen, hogy részenként dolgozzuk fel az adatot..

ez a módszer kényelmesebb és támogatja a távoli fájlelérést is, azonban ha ez a szempont inkább cURL-t használnék, mert ott lehet időtúllépést megadni, ennél a megoldásnál pedig ha nem válaszol a távoli szerver elhasal a folyamat..

REMÉLEM TUDTAM SEGÍTEN! - :)
5

fopen

Poetro · 2013. Júl. 5. (P), 15.20
Az fopen is képes minderre. Azaz azzal is meg tudsz nyitni URL-t, vagy bármi mást is.
7

~

aztek · 2013. Júl. 5. (P), 16.52
nem mélyedtem bele a fájlkezelő műveletek ilyen nemű használatába.. a távoli eléréshez ott a cURL, ami paraméterezhető, platformfüggetlen és szinte minden nyelvhez van implementációja..

de kösz, hátha egyszer fontos lesz - ;)
8

Igen, de

Pepita · 2013. Júl. 7. (V), 14.42
annak is feltétele a megfelelő php.ini beállítás.