Labadiena.
Šodien veiksim salīdzinošo testu dažādām metodēm, ar kuru palīdzību var veikt failu piekļuves wrappošanu. Respektīvi, ja jums ir fails, kuram piekļuvi nepieciešams kontrolēt, un to darīsiet ar php, tad šeit uzzināsiet kā to var darīt un ar kādiem rezultātiem.
Testam izmantosim serveri ar Gentoo operētāj sistēmu. Fails atradīsies uz ext3 formatētas failu sistēmas, turpat būs arī mūsu testa programma. Tagad par pašu testa metodoloģiju:
Lai veiktu testus, izveidosim elementāru skriptu, kas izmantos dažādas metodes, lai veiktu faila satura pārsūtīšanu lietotājam. Darbības izpildes laiku kontrolēsim ar "time" komandu. Tagad par veidiem, kādi ir pieejami dotā uzdevuma realizācijai:
1) fopen
2) file_get_contents
3) passthru
Tālāk, izveidojam skriptu, kas, efektīvākas testēšanas nolūkos, 100 reizes pēc kārtas atgriež "aizsargāto" failu, izmantojot kādu no metodēm. Iesākumam, sāksim ar vienu reizi. Testa faila izmērs ir 5700772 baiti.
Kā redzam, visefektīvākā ir bijusi metode, izmantojot file_get_contents funkciju un visnefektīvākā ir bijusi sekvenciālā lasīšāna ar fgets no fopen atvērtā faila. Pēdējā neizmantoja satura buferošanu, bet drukāja kolīdz tika ielasīts gabaliņš. Tas izskaidro ievērojami dārgāko procedūru.
Tagad aplūkosim rezultātus 100 iterāciju gadījumā:
Secinājums? Arī 100 iterāciju tests uzrāda, ka nebūtu ieteicams izmantot fopen, bet tā vietā varam izmantot vai nu file_get_contents vai arī passthru. Abām pēdējām rezultāti ir ļoti līdzīgi. passthru būs veselīgāk lietot par file_get_contents tādā gadījumā, ja jums ir jāpārsūta ļoti lieti atmiņas daudzumi, jo file_get_contents vispirms datus ielādēs atmiņā, kas PHP skriptam ir diezgan limitēta. Passthru savukārt faila saturu pa taisno nosūtīs uz stdout strīmu.
Ja ir citi novērojumi, padalieties komentāros. Cerams, ka noderēja.
Šodien veiksim salīdzinošo testu dažādām metodēm, ar kuru palīdzību var veikt failu piekļuves wrappošanu. Respektīvi, ja jums ir fails, kuram piekļuvi nepieciešams kontrolēt, un to darīsiet ar php, tad šeit uzzināsiet kā to var darīt un ar kādiem rezultātiem.
Testam izmantosim serveri ar Gentoo operētāj sistēmu. Fails atradīsies uz ext3 formatētas failu sistēmas, turpat būs arī mūsu testa programma. Tagad par pašu testa metodoloģiju:
Lai veiktu testus, izveidosim elementāru skriptu, kas izmantos dažādas metodes, lai veiktu faila satura pārsūtīšanu lietotājam. Darbības izpildes laiku kontrolēsim ar "time" komandu. Tagad par veidiem, kādi ir pieejami dotā uzdevuma realizācijai:
1) fopen
2) file_get_contents
3) passthru
Tālāk, izveidojam skriptu, kas, efektīvākas testēšanas nolūkos, 100 reizes pēc kārtas atgriež "aizsargāto" failu, izmantojot kādu no metodēm. Iesākumam, sāksim ar vienu reizi. Testa faila izmērs ir 5700772 baiti.
Kā redzam, visefektīvākā ir bijusi metode, izmantojot file_get_contents funkciju un visnefektīvākā ir bijusi sekvenciālā lasīšāna ar fgets no fopen atvērtā faila. Pēdējā neizmantoja satura buferošanu, bet drukāja kolīdz tika ielasīts gabaliņš. Tas izskaidro ievērojami dārgāko procedūru.
Tagad aplūkosim rezultātus 100 iterāciju gadījumā:
Secinājums? Arī 100 iterāciju tests uzrāda, ka nebūtu ieteicams izmantot fopen, bet tā vietā varam izmantot vai nu file_get_contents vai arī passthru. Abām pēdējām rezultāti ir ļoti līdzīgi. passthru būs veselīgāk lietot par file_get_contents tādā gadījumā, ja jums ir jāpārsūta ļoti lieti atmiņas daudzumi, jo file_get_contents vispirms datus ielādēs atmiņā, kas PHP skriptam ir diezgan limitēta. Passthru savukārt faila saturu pa taisno nosūtīs uz stdout strīmu.
Ja ir citi novērojumi, padalieties komentāros. Cerams, ka noderēja.
Nevajag jau lietot fgets. fgets dara papildu darbu - meklē failā, kur beidzas rinda. Pamēģīni fread - tam vajadzētu darboties ātrāk, jo tas vienkārši lasa failu.
AtbildētDzēstbūs vēlāk papildinājums šim rakstam ar citām metodem failu piekļuves tiesību kontrolei. šīs bija vienkāršākās metodes, iesākumam.
AtbildētDzēst