Het zijn twee verschillende functies; fgets() leest per regel (tot de \n dus) en fread() leest een willekeurig aantal bytes in. Aangezien fgets() alles wat ie leest moet verwerken en fread() simpelweg een countertje ophoogt, is die laatste functie theoretisch het snelstquote:Op maandag 2 juli 2007 18:24 schreef Chandler het volgende:
Ik wilde graag weten wat is sneller.
fgets
fread
Heb zelf getest maar kon niet vinden welke nu echt sneller was
Klopt, maar zie graag de meest snelle methode om bv een 10KB bestand uit te lezen.. met een hoop enters..quote:Op maandag 2 juli 2007 19:04 schreef JeRa het volgende:
[..]
Het zijn twee verschillende functies; fgets() leest per regel (tot de \n dus) en fread() leest een willekeurig aantal bytes in. Aangezien fgets() alles wat ie leest moet verwerken en fread() simpelweg een countertje ophoogt, is die laatste functie theoretisch het snelst
Maar in de praktijk gebruik je ze dus voor verschillende doeleinden
quote:Op maandag 2 juli 2007 19:25 schreef Chandler het volgende:
[..]
Klopt, maar zie graag de meest snelle methode om bv een 10KB bestand uit te lezen.. met een hoop enters.. :D
1 2 3 | $data = file_get_contents('bestand.dat'); ?> |
Shame on youquote:Op maandag 2 juli 2007 19:30 schreef Chandler het volgende:
Ik draai nog PHP 4.2.1
PHP 4 >= 4.3.0, PHP 5
Geen idee ff benchmark bouwenquote:Op dinsdag 3 juli 2007 07:46 schreef Chandler het volgende:
maar zijn deze functies sneller dan fgets?
Het resultaat:quote:
De code die ik gebruikt heb:quote:wyrihaximus@localhost:~> php benchmark.php
Did 1000000 file_get_contents_fake() in 30.380990028381 seconds
Did 1000000 file_get_contents_fake2() in 34.327764987946 seconds
wyrihaximus@localhost:~> php benchmark.php
Did 1000000 file_get_contents_fake() in 30.18455696106 seconds
Did 1000000 file_get_contents_fake2() in 33.193086862564 seconds
wyrihaximus@localhost:~> php benchmark.php
Did 1000000 file_get_contents_fake() in 29.584892988205 seconds
Did 1000000 file_get_contents_fake2() in 36.115298986435 seconds
wyrihaximus@localhost:~> php benchmark.php
Did 1000000 file_get_contents_fake() in 29.321064949036 seconds
Did 1000000 file_get_contents_fake2() in 32.658441066742 seconds
wyrihaximus@localhost:~> php benchmark.php
Did 1000000 file_get_contents_fake() in 28.93373298645 seconds
Did 1000000 file_get_contents_fake2() in 34.299740076065 seconds
wyrihaximus@localhost:~>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | function file_get_contents_fake($file) { return implode('',file($file)); } $mtime = explode(' ',microtime()); $time_start = $mtime[0] + $mtime[1]; for($i=0;$i<1000000;$i++) { file_get_contents_fake('/home/wyrihaximus/little.tmp'); } $mtime = explode(' ',microtime()); $time_end = $mtime[0] + $mtime[1]; $time = $time_end - $time_start; echo "Did " . $i . " file_get_contents_fake() in $time secondsn"; function file_get_contents_fake2($file) { $data = ''; $fp = fopen($file, 'r'); while (!feof($fp)) { $data .= fread($fp, 16384); } fclose($fp); return $data; } $mtime = explode(' ',microtime()); $time_start = $mtime[0] + $mtime[1]; for($i=0;$i<1000000;$i++) { file_get_contents_fake2('/home/wyrihaximus/little.tmp'); } $mtime = explode(' ',microtime()); $time_end = $mtime[0] + $mtime[1]; $time = $time_end - $time_start; echo "Did " . $i . " file_get_contents_fake2() in $time secondsn"; ?> |
En het geheugengebruik?quote:Op dinsdag 3 juli 2007 08:12 schreef WyriHaximus het volgende:
[..]
Het resultaat:
[..]
De code die ik gebruikt heb:
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 10 11 | { $data = ''; $fp = fopen($file, 'r'); while (!feof($fp)) { $data .= fread($fp, 16384); } fclose($fp); return $data; } |
Hmm dat is toch tricky best om het echt netjes te doenquote:
Code:quote:76664 bytes
Did 1000000 file_get_contents_fake() in 26.938782930374 seconds: 79156 bytes
Did 1000000 file_get_contents_fake2() in 33.518908977509 seconds: 79688 bytes
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | function file_get_contents_fake($file) { return implode('',file($file)); } function file_get_contents_fake2($file) { $data = ''; $fp = fopen($file, 'r'); while (!feof($fp)) { $data .= fread($fp, filesize($file)); } fclose($fp); return $data; } echo(memory_get_usage() . " bytesn"); $mtime = explode(' ',microtime()); $time_start = $mtime[0] + $mtime[1]; for($i=0;$i<1000000;$i++) { file_get_contents_fake('/home/HAARLEM/cjk/little.tmp'); } $mtime = explode(' ',microtime()); $time_end = $mtime[0] + $mtime[1]; $time = $time_end - $time_start; echo "Did " . $i . " file_get_contents_fake() in $time seconds: " . memory_get_usage() . " bytesn"; $mmem = memory_get_usage(); $mtime = explode(' ',microtime()); $time_start = $mtime[0] + $mtime[1]; for($i=0;$i<1000000;$i++) { file_get_contents_fake2('/home/HAARLEM/cjk/little.tmp'); } $mtime = explode(' ',microtime()); $time_end = $mtime[0] + $mtime[1]; $time = $time_end - $time_start; echo "Did " . $i . " file_get_contents_fake2() in $time seconds: " . memory_get_usage() . " bytesn"; ?> |
Ja moet wel: http://nl2.php.net/fread nu ff met filesize neer gezetquote:Op dinsdag 3 juli 2007 09:50 schreef Chandler het volgende:
en als je nu eens van
[ code verwijderd ]
de 16384 weghaalt, hier hoef je toch geen 'grootte' aan te koppelen? en anders eens gewoon op 1024 zet (meeste scripts bevatten toch niet langere regels dan 1024 chars)
1 2 3 4 5 6 7 8 9 10 11 12 13 | function file_get_contents_fake2($file) { $data = ''; $fp = fopen($file, 'r'); while (!feof($fp)) { $data .= fread($fp, filesize($file)); } fclose($fp); return $data; } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | function file_get_contents_fake2($file) { $data = ''; // $xSize = filesize($file); $fp = fopen($file, 'r'); while (!feof($fp)) { $data .= fread($fp, 1024); } fclose($fp); return $data; } ?> |
quote:Op dinsdag 3 juli 2007 10:00 schreef Chandler het volgende:
Tip:
[ code verwijderd ]
veranderen in
[ code verwijderd ]
want waarom lees je steeds stukken uit die net zo groot zijn als 'het bestand zelf'?(ik doel nu even op tekst gebasseerde bestanden!
Scheelt wel iddquote:76476 bytes
Did 1000000 file_get_contents_fake() in 26.639196157455 seconds: 78992 bytes
Did 1000000 file_get_contents_fake2() in 29.833640098572 seconds: 79524 bytes
Deze keer ook file_get_contents() gedaan om goed te kunnen vergelijkenquote:80772 bytes
Did 100000 file_get_contents_fake() in 45.338598966599 seconds: 123716932 bytes
Did 100000 file_get_contents_fake2() in 23.763649940491 seconds: 938117048 bytes
Did 100000 file_get_contents() in 14.183950901031 seconds: 938117152 bytes
Doe eens een gokquote:Op dinsdag 3 juli 2007 10:50 schreef Chandler het volgende:
@WyriHaximus; wat zijn speties?
Helaas kan ik geen file_get_contents gebruikenmaaruh heb je de nieuwe source ook? even checken op mijn systeem... (heb mijn lappie mee naar m'n werk
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | function file_get_contents_fake($file) { return implode('',file($file)); } function file_get_contents_fake2($file) { $data = ''; $fp = fopen($file, 'r'); while (!feof($fp)) { $data .= fread($fp, 1024); } fclose($fp); return $data; } echo(memory_get_usage() . " bytesn"); $mtime = explode(' ',microtime()); $time_start = $mtime[0] + $mtime[1]; for($i=0;$i<100000;$i++) { file_get_contents_fake('/home/HAARLEM/cjk/little.tmp'); } $mtime = explode(' ',microtime()); $time_end = $mtime[0] + $mtime[1]; $time = $time_end - $time_start; echo "Did " . $i . " file_get_contents_fake() in $time seconds: " . memory_get_usage() . " bytesn"; $mmem = memory_get_usage(); $mtime = explode(' ',microtime()); $time_start = $mtime[0] + $mtime[1]; for($i=0;$i<100000;$i++) { file_get_contents_fake2('/home/HAARLEM/cjk/little.tmp'); } $mtime = explode(' ',microtime()); $time_end = $mtime[0] + $mtime[1]; $time = $time_end - $time_start; echo "Did " . $i . " file_get_contents_fake2() in $time seconds: " . memory_get_usage() . " bytesn"; $mmem = memory_get_usage(); $mtime = explode(' ',microtime()); $time_start = $mtime[0] + $mtime[1]; for($i=0;$i<100000;$i++) { file_get_contents('/home/HAARLEM/cjk/little.tmp'); } $mtime = explode(' ',microtime()); $time_end = $mtime[0] + $mtime[1]; $time = $time_end - $time_start; echo "Did " . $i . " file_get_contents() in $time seconds: " . memory_get_usage() . " bytesn"; ?> |
Die laatste was al met datquote:Op dinsdag 3 juli 2007 10:57 schreef doka het volgende:
Scheelt nogal wat qua geheugen.
Zou je die laatste nog een keer kunnen doen? Maar dan met
$data .= fread($fp, 1024); in file_get_contents_fake2
Maar wat zijn speties nou????quote:Op dinsdag 3 juli 2007 11:00 schreef WyriHaximus het volgende:
Die laatste was al met dat. Zal ff fake3 ook maken
.
Spatiesquote:Op dinsdag 3 juli 2007 11:04 schreef Chandler het volgende:
[..]
Maar wat zijn speties nou????en ik wacht even je update af, kun je ook de pagina die jij gebruikt even linken? zodat ik dezelfde 'test' scripting heb?
Code:quote:87512 bytes
Did 100000 file_get_contents_fake() in 45.875488042831 seconds: 108920596 bytes
Did 100000 file_get_contents_fake2() in 22.202512979507 seconds: 923320712 bytes
Did 100000 file_get_contents_fake3() in 13.83746099472 seconds: 358186172 bytes
Did 100000 file_get_contents() in 13.45986199379 seconds: 358186220 bytes
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | function file_get_contents_fake($file) { return implode('',file($file)); } function file_get_contents_fake2($file) { $data = ''; $fp = fopen($file, 'r'); while (!feof($fp)) { $data .= fread($fp, 1024); } fclose($fp); return $data; } function file_get_contents_fake3($file) { $data = ''; $fp = fopen($file, 'r'); while (!feof($fp)) { $data .= fread($fp, filesize($file)); } fclose($fp); return $data; } echo(memory_get_usage() . " bytesn"); $mtime = explode(' ',microtime()); $time_start = $mtime[0] + $mtime[1]; for($i=0;$i<100000;$i++) { file_get_contents_fake('/home/HAARLEM/cjk/little.tmp'); } $mtime = explode(' ',microtime()); $time_end = $mtime[0] + $mtime[1]; $time = $time_end - $time_start; echo "Did " . $i . " file_get_contents_fake() in $time seconds: " . memory_get_usage() . " bytesn"; $mmem = memory_get_usage(); $mtime = explode(' ',microtime()); $time_start = $mtime[0] + $mtime[1]; for($i=0;$i<100000;$i++) { file_get_contents_fake2('/home/HAARLEM/cjk/little.tmp'); } $mtime = explode(' ',microtime()); $time_end = $mtime[0] + $mtime[1]; $time = $time_end - $time_start; echo "Did " . $i . " file_get_contents_fake2() in $time seconds: " . memory_get_usage() . " bytesn"; $mmem = memory_get_usage(); $mtime = explode(' ',microtime()); $time_start = $mtime[0] + $mtime[1]; for($i=0;$i<100000;$i++) { file_get_contents_fake3('/home/HAARLEM/cjk/little.tmp'); } $mtime = explode(' ',microtime()); $time_end = $mtime[0] + $mtime[1]; $time = $time_end - $time_start; echo "Did " . $i . " file_get_contents_fake3() in $time seconds: " . memory_get_usage() . " bytesn"; $mmem = memory_get_usage(); $mtime = explode(' ',microtime()); $time_start = $mtime[0] + $mtime[1]; for($i=0;$i<100000;$i++) { file_get_contents('/home/HAARLEM/cjk/little.tmp'); } $mtime = explode(' ',microtime()); $time_end = $mtime[0] + $mtime[1]; $time = $time_end - $time_start; echo "Did " . $i . " file_get_contents() in $time seconds: " . memory_get_usage() . " bytesn"; ?> |
quote:
Er zijn alternatievenquote:Op dinsdag 3 juli 2007 11:54 schreef Chandler het volgende:
argh! ik heb ook geen memory_get_usage();
http://195.241.92.20/PMAquote:Kan de mysql-extensie niet laden. Controleer de PHP configuratie. - Documentatie
ik denk dat je dan eerst de strings moet exploden door spaties. Dan voer je de arrays die je over houdt in in een db. Vervolgens neem je uit die database een LIMIT 15 met count(woord) als ASC.quote:Op dinsdag 3 juli 2007 12:53 schreef Chandler het volgende:
Leuke vraag voor onze MySQLers.
Is het mogeljik om bv uit alle titels de woorden te filteren en daarvan een lijst te maken voor een TAG cloud?
Oftewel een paar titels
wat vind je van mijn plaatje
hoe werkt mijn profiel
wat vind je van mijn site
en dan van alle woorden een cloud tag maken? is dat mogelijk?
Tagclouds koppelen termen aan documenten, dat kán wel zonder database, maar dan ben je ontzettend omslachtig bezigquote:Op dinsdag 3 juli 2007 13:14 schreef Chandler het volgende:
PiRaNiA; ik had eingelijk gehoopt dat dit kon zonder extra database ed...
Travelmate 2420 trouwens?quote:Op dinsdag 3 juli 2007 12:19 schreef Chandler het volgende:
@WyriHaximus; die had ik al
Maar mijn uitkomsten (Acer laptop; 1GB / 1600Mhz ofzo)
Fake() 169.1931 secs (8.85MB)
Fake2() 92.5197 secs (8.84MB)
Fake3() 57.3769 secs (8.88MB)kon helaas de laatste niet testen ivm outdated PHP versie
quote:Op dinsdag 3 juli 2007 13:34 schreef JeRa het volgende:
[..]
Tagclouds koppelen termen aan documenten, dat kán wel zonder database, maar dan ben je ontzettend omslachtig bezig
Ben met ongeveer het zelfde bezig heb alleen het probleem dat ik niet weet hoe ik het zo netjes als deze voor elkaar krijgquote:Op dinsdag 3 juli 2007 14:08 schreef Chandler het volgende:
Vond het even leuk om te kijken wat voor soort cloud tag ik zou krijgen op mijn poll websitebest veel woorden zeg
Hoeveel krijg ik dr voorquote:Op woensdag 4 juli 2007 11:57 schreef Qunix het volgende:
Ik moet een agenda systeem maken. Mijn php kennis is niet erg geweldig maar ook weet ik niet hoe te beginnen aan zo'n systeem. Kan iemand mij helpen om een begin te maken aan een agenda systeem?
De bedoeling is een kalender en zodra op een datum geklikt te hebben informatie wat op de dag moet gebeuren.
Bvd.
Als je een kalender/agenda wilt maken met informatie per dag, zul je die informatie dus relationeel op moeten slaan per datum. Heb je al in gedachten hoe je dit wilde doen (database bijvoorbeeld)?quote:Op woensdag 4 juli 2007 12:18 schreef Qunix het volgende:
[..]
Ik vraag of iemand mij kan helpen met een begin.....
Waar kan ik bestaande oplossingen vinden? Overal waar ik kijk zie ik iets wat ik moet kopen...quote:Op woensdag 4 juli 2007 12:35 schreef JeRa het volgende:
[..]
Als je een kalender/agenda wilt maken met informatie per dag, zul je die informatie dus relationeel op moeten slaan per datum. Heb je al in gedachten hoe je dit wilde doen (database bijvoorbeeld)?
En waarom gebruik je niet een van de bestaande oplossingen?
Dan wordt het een moeilijk verhaal denk ik...quote:Op woensdag 4 juli 2007 13:41 schreef Qunix het volgende:
[..]
Waar kan ik bestaande oplossingen vinden? Overal waar ik kijk zie ik iets wat ik moet kopen...
Ook de database indeling heb ik geen idee.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | function water($image,$wlogo,$transpirantie,$uitlijning){ /* Uitlijning opties TL = top links TM = top midden TR = top rechts CL = center links CM = center midden CR = center rechts BL = beneden links BM = beneden midden BR = beneden rechts ABS = top links wat meer naar rechts RND = rondom (overal) einde instelingen */ require "./watermerk.class.php"; // case nr's komen vanuit de functie exif_imagetype deze hangt standaard een nr een een type file switch (exif_imagetype($image)) { case 1: $handle = new RWatermark(FILE_GIF, $image); break; case 2: $handle = new RWatermark(FILE_JPEG, $image); break; case 3: $handle = new RWatermark(FILE_PNG, $image); break; case 6: $handle = new RWatermark(FILE_BMP, $image); break; case 15: $handle = new RWatermark(FILE_WBMP, $image); break; case HANDLE: $handle = new RWatermark(FILE_XPM, $image); break; default: exit("Onbekende extentsie of word niet ondersteund (image)"); return false; } $handle->SetPosition($uitlijning); $handle->SetTransparentColor(255, 0, 255); $handle->SetTransparency($transpirantie); switch (exif_imagetype($wlogo)) { case 1: $handle->AddWatermark(FILE_GIF, $wlogo); break; case 2: $handle->AddWatermark(FILE_JPEG, $wlogo); break; case 3: $handle->AddWatermark(FILE_PNG, $wlogo); break; case 6: $handle->AddWatermark(FILE_BMP, $wlogo); break; case 15: $handle->AddWatermark(FILE_WBMP, $wlogo); break; case HANDLE: $handle->AddWatermark(FILE_XMP, $wlogo); break; default: exit("Onbekende extentsie of word niet ondersteund (Logo)"); return false; } header("Content-type: " . image_type_to_mime_type($image)); $handle->GetMarkedImage(IMG_PNG); $handle->Destroy(); return $foto; } <img src=" echo water("iets.jpg","logo.png","50","RB"); "> ?> |
1 2 3 4 5 6 | return $foto; } <img src=" echo water("iets.jpg","logo.png","50","RB"); "> ?> |
1 2 3 4 5 6 7 | return $foto; } ?> <img src="<?php echo water("iets.jpg","logo.png","50","RB"); ?> "> |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |