Gjest Slettet+6132 Skrevet 30. august 2006 Del Skrevet 30. august 2006 Prosessoren på serveren er en Pentium på 200MHz, så jeg tviler på den har flere kjerner. Skal prøve koden din jeg, takk så mye. (Konspirasjon: Kanskje serveren er så treg at tiden kjeder seg og løper fra serveren? Hurra!) Lenke til kommentar
Ernie Skrevet 30. august 2006 Del Skrevet 30. august 2006 (endret) Javel, det var jo merkelig. Det som er enda mer merkelig er at hvis man legger på 1 på de negative tallene får man tall rundt de andre Endret 30. august 2006 av Ernie Lenke til kommentar
genstian Skrevet 30. august 2006 Del Skrevet 30. august 2006 Er tallet lavere en 0,006 så vil PHP gjøre tiden om til ms, tror jeg. Lenke til kommentar
genstian Skrevet 30. august 2006 Del Skrevet 30. august 2006 (endret) **Dual** Sorry Endret 30. august 2006 av hotstian Lenke til kommentar
genstian Skrevet 30. august 2006 Del Skrevet 30. august 2006 Løsning: Feilen: echo microtime(TRUE) - microtime(TRUE); # Vil gi noe som 4.199218749E-05 Løsningen: # fikser feilmargin i koden ini_set("precision", 100); $start = microtime(TRUE); /* code */ $stop = microtime(TRUE); # round MÅ brukes for å unngå super output på hundre tegn echo "Dette tok: ", round($stop*1000 - $start*1000, 20); Feil2: $start = microtime(TRUE); for($i=0;$i<=100000;$i++) {/* */ } $stop = microtime(TRUE); echo "Dette tok: ", round($stop*1000 - $start*1000, 20); # Dette vil nå gi hos en 1000 ganger høyere tid. Lenke til kommentar
Ernie Skrevet 30. august 2006 Del Skrevet 30. august 2006 Er tallet lavere en 0,006 så vil PHP gjøre tiden om til ms, tror jeg. 6773103[/snapback] Nope, det skrives bare ut på et annen måte (vitenskapelig notasjon eller hva det nå heter. Iallfall [tall mellom 1 og 10]*10^[et eller annet tall], eller som det skrives i PHP f.eks 1.2E-5). Forøvrig: Feilen: echo microtime(TRUE) - microtime(TRUE); # Vil gi noe som 4.199218749E-05 6773236[/snapback] Den vil jo være ganske åpenbart feil siden du tar et tidspunkt og trekker fra et tidspunkt etterpå. Blir det samme som å si: $var1 = microtime(true); $var2 = microtime(true); echo $var1 - $var2; Så du er nok likelangt. Klarer forøvrig ikke å gjenskape problemet hos meg selv. Samme hva jeg gjør får jeg alltid et positivt tall, selv når jeg klemmer de så tett inntil hverandre som jeg klarer tidsmessig. $var1 = microtime(true); $var2 = microtime(true); echo $var2 - $var1; Lenke til kommentar
genstian Skrevet 30. august 2006 Del Skrevet 30. august 2006 Tenkte på ms delen kjape runtimes jeg Lenke til kommentar
Gjest Slettet+6132 Skrevet 30. august 2006 Del Skrevet 30. august 2006 Klarer forøvrig ikke å gjenskape problemet hos meg selv. Samme hva jeg gjør får jeg alltid et positivt tall, selv når jeg klemmer de så tett inntil hverandre som jeg klarer tidsmessig. $var1 = microtime(true); $var2 = microtime(true); echo $var2 - $var1; Er ikke så ofte det skjer, men det skjer. Scriptet det er snakk om er ganske stort og alt styres fra en php-fil som inkluderer alt annet som trengs. Selve fila det er snakk om (som styrer alt) er vel på snaue 500 linjer med starttid helv øverst og sluttid så godt som nederst. Har output buffering noe å si kanskje (benytter meg av det)? Lenke til kommentar
Ernie Skrevet 31. august 2006 Del Skrevet 31. august 2006 Klarer forøvrig ikke å gjenskape problemet hos meg selv. Samme hva jeg gjør får jeg alltid et positivt tall, selv når jeg klemmer de så tett inntil hverandre som jeg klarer tidsmessig. $var1 = microtime(true); $var2 = microtime(true); echo $var2 - $var1; Er ikke så ofte det skjer, men det skjer. Scriptet det er snakk om er ganske stort og alt styres fra en php-fil som inkluderer alt annet som trengs. Selve fila det er snakk om (som styrer alt) er vel på snaue 500 linjer med starttid helv øverst og sluttid så godt som nederst. Har output buffering noe å si kanskje (benytter meg av det)? 6773624[/snapback] Det skal ikke ha noe å si iallfall. Alt man gjør er jo bare å cache all output. Når det i tillegg er opp mot 500 linjer mellom hver måling burde jo differansen være positiv Eneste jeg kan tenke meg akkurat nå er at det er en bug Lenke til kommentar
jorgis Skrevet 31. august 2006 Del Skrevet 31. august 2006 Hvilken PHP-versjon kjører du? Lenke til kommentar
Gjest Slettet+6132 Skrevet 31. august 2006 Del Skrevet 31. august 2006 Kjører debian, phpinfo() sier 4.3.10-16 (sammen med apache2). Lenke til kommentar
Ernie Skrevet 3. september 2006 Del Skrevet 3. september 2006 Hmm ... irriterende. Forsøker skrive til en fil ved å legge til øverst, men da fjerner man jo selvsagt resten av fila $content = $new.'\n'.file_get_contents("file.txt"); $fp = fopen('file.txt', 'w'); fwrite($fp, $content); fclose($fp); Selvsagt, kan gjøre det sånn, men da får man jo et problem straks fil + det man skal legge til er høyere enn minnegrensa i PHP (som forsåvidt løses med to filer og a i stedet for w). Det ideele hadde vært å skrive direkte øverst i fila uten å måtte skrive alt sammen på nytt til fil. Ideer anyone? Lenke til kommentar
jorgis Skrevet 3. september 2006 Del Skrevet 3. september 2006 Kan dette ikke løses ved å legge ting nederst i filen istedenfor i toppen? Lese av og legge til nederst fremfor øverst gjør vel at en slipper å lese inn hele filen for hver gang, men kan bare kjøre en append (a istedet for w). Litt usikker på hvordan en kan lese effektivt av slutten på en fil, men det er noe du må finne ut av basert på mengden skriving vs. mengden lesing. Leser du mest, kjør fra start av filen, skriver du mest, legger du til på slutten av filen. Lenke til kommentar
Ernie Skrevet 3. september 2006 Del Skrevet 3. september 2006 Vel, å legge det nyest nederst blir bare dumt siden det blir både mest lesing generelt og lesing av det nyeste. Lenke til kommentar
jorgis Skrevet 3. september 2006 Del Skrevet 3. september 2006 Vel, å legge det nyest nederst blir bare dumt siden det blir både mest lesing generelt og lesing av det nyeste. 6796011[/snapback] Uki, da har du rett og slett et problem. Å legge til på slutten av en fil er en enkel operasjon som kan gjøres uten å lese hele filen, men når du skal legge til noe på slutten av en fil må du åpne hele filen og legge alt innholdet inn i filen på nytt igjen. Mye stress for lite arbeid, men når du skal lese mye fra starten av filen er det bare slik det må være, rett og slett. Om det er uakseptabelt å lese inn/skrive inn hele filen for hver nye linje som skrives, bør du kanskje vurdere andre måter å lagre data på, eller andre måter å skrive/lese data fra filene på. Lenke til kommentar
dabear Skrevet 3. september 2006 Del Skrevet 3. september 2006 (endret) Å legge til øverst er faktisk mulig, men det vil ikke gi forventa resultat. Om du skal skrive $bytes til $file og $bytes er mindre enn innholdet i file, vil du overskrive de første bokstavene av fila tilsvarende $bytes, mens resten blir som det er. Ellers vil hele filinnholdet overskrives. Jeg gjorde en liten test. La oss si at test.txt ikke finnes enda: bjorninge@bjorninge-laptop:~/Desktop$ php -r'$file = fopen("test.txt", "w"); fwrite($file, "denne dataen er lagt til først!\n"); fclose($file);' bjorninge@bjorninge-laptop:~/Desktop$ php -r' $file = fopen("test.txt", "r+");rewind($file); fwrite($file, "denne dataen er lagt til sist!\n"); fclose($file);echo file_get_contents("test.txt");' denne dataen er lagt til sist! ! Så det beste vil vel være å appende til fila, mens du fseek()-er deg X antall linjer tilbake ved lesing. Et annet alternativ er å bruke flere filer, og bare sørge for at hver fil er liten nok till at php kan lese den uten minneproblemer. Endret 3. september 2006 av dabear Lenke til kommentar
rødøye Skrevet 4. september 2006 Del Skrevet 4. september 2006 Du har ikke mulighet for å lagre dataene i en database? Lenke til kommentar
Peter Skrevet 4. september 2006 Del Skrevet 4. september 2006 Er jo mulig du kan kødde litt ved å bruke (pseudo-linux-kode): - opprett filen ny_fil - skriv din setning i ny_fil - cat gammel_fil > ny_fil - mv ny_fil gammel_fil Ellers tror jeg du kan gjøre noe av det samme (uten linux-kommandoene) ved hjelp av streams, men de kom vel først i PHP5. Lenke til kommentar
jorgis Skrevet 4. september 2006 Del Skrevet 4. september 2006 Nazgul: Om han har PHP5 kunne han like godt brukt SQLite... Lenke til kommentar
Ernie Skrevet 4. september 2006 Del Skrevet 4. september 2006 (endret) Du har ikke mulighet for å lagre dataene i en database? 6801213[/snapback] Joda, jeg har det, men ikke andre Uannsett, 8MB (er vel det som er standard max minnebruk i PHP) holder jo lenge. Er jo mulig du kan kødde litt ved å bruke (pseudo-linux-kode):- opprett filen ny_fil - skriv din setning i ny_fil - cat gammel_fil > ny_fil - mv ny_fil gammel_fil Ellers tror jeg du kan gjøre noe av det samme (uten linux-kommandoene) ved hjelp av streams, men de kom vel først i PHP5. 6801848[/snapback] Hmm ... forsåvidt ikke så dumt. Bare "oversette" det til PHP. rename("file", "old_file"); $fp_new = fopen("file", "w"); $fp_old = fopen("old_file", "r"); fwrite($fp_new, $new_content); while (!feof($fp_old)) { $data = fread($fp_old, 1048576); //opptil 1MiB data lese omgangen, bare for å slippe å loope sånn veldig fwrite($fp_new, $data); } fclose($fp_old); fclose($fp_new); unlink("old_file"); Bare passe på å bruke den som en "nødløsning" når fila + nytt innhold er sånn cirka i nærheten av minnegrensa. Edit: Ups, kanskje fread i stedet for fgets Endret 4. september 2006 av Ernie Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå