/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
tilføj linie til begyndelse af fil
Fra : scootergrisen


Dato : 26-11-10 23:07

Hvad er de bedst måde at tilføje en linie med tekst og \r\n til en fils
begyndelse ?

Man kan jo læse hele filen ind i et variabel også tilføjen den linie
øverst og skrive det hele igen. Men det virke unødvendigt at skulle læse
hele filen ind.

$nylinie = "Her er noget tekst jeg gerne vil gemme\r\n";

Denne fil :

Her er noget tekst\r\n
Her er noget mere tekst\r\n
Og her er igen noget tekst\r\n

Skulle gerne blive til :

Her er noget tekst jeg gerne vil gemme\r\n
Her er noget tekst\r\n
Her er noget mere tekst\r\n
Og her er igen noget tekst\r\n

Men altså uden at skulle læse filen først... Kan du lade sig gøre ?

 
 
Karl Erik Christense~ (27-11-2010)
Kommentar
Fra : Karl Erik Christense~


Dato : 27-11-10 00:21

On 26-11-2010 23:07, scootergrisen wrote:

>
> Men altså uden at skulle læse filen først... Kan du lade sig gøre ?

file_put_contents med FILE_APPEND flag sat.

Karl Erik.

--
http://www.tyveri-check.dk - Snyd tyven før han snyder dig!
http://www.ranunkelvej.com
http://webdesign.ranunkelvej.com - Artikler om webdesign


scootergrisen (27-11-2010)
Kommentar
Fra : scootergrisen


Dato : 27-11-10 01:07

> file_put_contents med FILE_APPEND flag sat.

Ja det smart... hvis man vil tilføje til slutningen af filen.
Men hvad hvis jeg vil tilføje til starten af filen ?

Karl Erik Christense~ (27-11-2010)
Kommentar
Fra : Karl Erik Christense~


Dato : 27-11-10 01:15

On 27-11-2010 01:06, scootergrisen wrote:
>> file_put_contents med FILE_APPEND flag sat.
>
> Ja det smart... hvis man vil tilføje til slutningen af filen.
> Men hvad hvis jeg vil tilføje til starten af filen ?

Prøv at studere lidt om filpointer.

Karl Erik.

--
http://www.tyveri-check.dk - Snyd tyven før han snyder dig!
http://www.ranunkelvej.com
http://webdesign.ranunkelvej.com - Artikler om webdesign


scootergrisen (27-11-2010)
Kommentar
Fra : scootergrisen


Dato : 27-11-10 01:34

> Prøv at studere lidt om filpointer.

Ok. Ved du hvordan man gør det med filpointer ?

scootergrisen (27-11-2010)
Kommentar
Fra : scootergrisen


Dato : 27-11-10 01:45

Det lader til hvis jeg bruger rewind() til at sætte fil pointeren til
begynden af filen at det jeg skriver til filen så vil blive overskrevet.

Altså hvis der i filen står :

XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX

Og jeg vil tilføje sætning "Hej\r\n" så kommer der med rewind() til at stå :

HejXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX

I stedet for :

Hej
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX

Karl Erik Christense~ (27-11-2010)
Kommentar
Fra : Karl Erik Christense~


Dato : 27-11-10 02:31

On 27-11-2010 01:34, scootergrisen wrote:
>> Prøv at studere lidt om filpointer.
>
> Ok. Ved du hvordan man gør det med filpointer ?

$myFile = "testFile.txt";
fopen($myFile, 'a');
rewind($myFile);
fwrite($myFile, 'Din_String');
fclose($myFile);

Du skal åbne filen i append-mode.

Testet i tankerne

Karl Erik.

--
http://www.tyveri-check.dk - Snyd tyven før han snyder dig!
http://www.ranunkelvej.com
http://webdesign.ranunkelvej.com - Artikler om webdesign


Karl Erik Christense~ (27-11-2010)
Kommentar
Fra : Karl Erik Christense~


Dato : 27-11-10 02:34

On 27-11-2010 02:31, Karl Erik Christensen wrote:
> On 27-11-2010 01:34, scootergrisen wrote:
>>> Prøv at studere lidt om filpointer.
>>
>> Ok. Ved du hvordan man gør det med filpointer ?
>
> $myFile = "testFile.txt";
> fopen($myFile, 'a');
> rewind($myFile);
> fwrite($myFile, 'Din_String');
> fclose($myFile);
>
> Du skal åbne filen i append-mode.
>
> Testet i tankerne
>
> Karl Erik.
>

fwrite($myFile, 'Din_String\n');

--
http://www.tyveri-check.dk - Snyd tyven før han snyder dig!
http://www.ranunkelvej.com
http://webdesign.ranunkelvej.com - Artikler om webdesign


scootergrisen (27-11-2010)
Kommentar
Fra : scootergrisen


Dato : 27-11-10 06:37

> fopen($myFile, 'a');

> Du skal åbne filen i append-mode.

Det tilføjer data til slutningen af filen.
Jeg ønsker at tilføje data til starten af filen.

Arne Feldborg (27-11-2010)
Kommentar
Fra : Arne Feldborg


Dato : 27-11-10 08:28

scootergrisen <scootergrisen@NOSPANKYOUgmail.com> skrev Sat, 27 Nov 2010
06:37:27 +0100

>> fopen($myFile, 'a');
>
>> Du skal åbne filen i append-mode.
>
>Det tilføjer data til slutningen af filen.
>Jeg ønsker at tilføje data til starten af filen.
>
Har du prøvet: fopen($myFile, 'r+')

--
mvh, A:\Feldborg
feldborg@haunstrup.dk
Slægtsforskning og lokalhistorie i midt- vestjylland
http://hammerum-herred.dk/

Arne Feldborg (27-11-2010)
Kommentar
Fra : Arne Feldborg


Dato : 27-11-10 09:10

Arne Feldborg <feldborg@haunstrup.dk> skrev Sat, 27 Nov 2010 08:27:50
+0100


>Har du prøvet: fopen($myFile, 'r+')
>
Glem det. Det virker heller ikke som du ønsker.

Jeg tvivler på du kan gøre det uden at læse hele filen ind først.

--
mvh, A:\Feldborg
feldborg@haunstrup.dk
Slægtsforskning og lokalhistorie i midt- vestjylland
http://hammerum-herred.dk/

scootergrisen (27-11-2010)
Kommentar
Fra : scootergrisen


Dato : 27-11-10 22:10

>> Har du prøvet: fopen($myFile, 'r+')
>>
> Glem det. Det virker heller ikke som du ønsker.
>
> Jeg tvivler på du kan gøre det uden at læse hele filen ind først.

Prøvede lige men nok den overskriver dataen der allerede er i filen...
Det kan da godt være man ikke kan gøre det uden at indlæsen hele filen
først. Jeg syns bare det virker som spild af tid.



Birger Sørensen (27-11-2010)
Kommentar
Fra : Birger Sørensen


Dato : 27-11-10 10:05

scootergrisen tastede følgende:
> Hvad er de bedst måde at tilføje en linie med tekst og \r\n til en fils
> begyndelse ?
>
> Man kan jo læse hele filen ind i et variabel også tilføjen den linie øverst
> og skrive det hele igen. Men det virke unødvendigt at skulle læse hele filen
> ind.
>
> $nylinie = "Her er noget tekst jeg gerne vil gemme\r\n";
>
> Denne fil :
>
> Her er noget tekst\r\n
> Her er noget mere tekst\r\n
> Og her er igen noget tekst\r\n
>
> Skulle gerne blive til :
>
> Her er noget tekst jeg gerne vil gemme\r\n
> Her er noget tekst\r\n
> Her er noget mere tekst\r\n
> Og her er igen noget tekst\r\n
>
> Men altså uden at skulle læse filen først... Kan du lade sig gøre ?

http://dk.php.net/manual/en/function.file-get-contents.php

$txt = file_get_contents( 'minfil.txt');
$txt = $nylinie.$txt;
file_put_contents( 'minfil.txt',$txt);

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



scootergrisen (27-11-2010)
Kommentar
Fra : scootergrisen


Dato : 27-11-10 22:13

>> Men altså uden at skulle læse filen først... Kan du lade sig gøre ?
>
> http://dk.php.net/manual/en/function.file-get-contents.php
>
> $txt = file_get_contents( 'minfil.txt');
> $txt = $nylinie.$txt;
> file_put_contents( 'minfil.txt',$txt);

Ja det er da en flot løsning.
Men nu spurgte jeg jo om det kunne lade sig gøre uden... UDEN... :) at
læse filens indhold først.

For jeg skal jo ikke bruge filens indhold til noget. Jeg skal bare
tilføje noget nyt til filen. Så syns det virker som spild hvis filens
indhold skal indlæses hver eneste gang.

Birger Sørensen (27-11-2010)
Kommentar
Fra : Birger Sørensen


Dato : 27-11-10 22:28

Efter mange tanker skrev scootergrisen:
>>> Men altså uden at skulle læse filen først... Kan du lade sig gøre ?
>>
>> http://dk.php.net/manual/en/function.file-get-contents.php
>>
>> $txt = file_get_contents( 'minfil.txt');
>> $txt = $nylinie.$txt;
>> file_put_contents( 'minfil.txt',$txt);
>
> Ja det er da en flot løsning.
> Men nu spurgte jeg jo om det kunne lade sig gøre uden... UDEN... :) at læse
> filens indhold først.
>
> For jeg skal jo ikke bruge filens indhold til noget. Jeg skal bare tilføje
> noget nyt til filen. Så syns det virker som spild hvis filens indhold skal
> indlæses hver eneste gang.

Tja - men det ser jo ikke ud til at kunne lade sig gøre..
Jeg mener som Karl Erik, at hvis det kan lade sig gøre, skal du åbne
filen til både læsning og skrivning, og manipulere filepointteren. Men
jeg tror bare, at den så vil overskrive det der står først i filen i
forvejen.
I øvrigt tror jeg også at det skal være en meget stor fil, for at det
kan betale sig at gøre en masse krumspring.
Du skal under alle omstændigheder både åbne og lukke filen, og det
tager tid og koster resourcer, så du kan måske spare et micro- eller
milli-sekunder ved ikke at læse filen - men det bliver lidt som at gå
over åen efter vand.. Jeg har ikke timet det, eller på anden måde noget
at have det i, men jeg tror altså ikke du sparer ret meget.

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Bertel Lund Hansen (27-11-2010)
Kommentar
Fra : Bertel Lund Hansen


Dato : 27-11-10 23:08

Birger Sørensen skrev:

> > For jeg skal jo ikke bruge filens indhold til noget. Jeg skal bare tilføje
> > noget nyt til filen. Så syns det virker som spild hvis filens indhold skal
> > indlæses hver eneste gang.

> Tja - men det ser jo ikke ud til at kunne lade sig gøre..

Det er måske grunddesignet der er forkert når man har brug for at
tilføje til starten af en fil?

--
Bertel
http://bertel.lundhansen.dk/         FIDUSO: http://fiduso.dk/

scootergrisen (27-11-2010)
Kommentar
Fra : scootergrisen


Dato : 27-11-10 23:23

> Tja - men det ser jo ikke ud til at kunne lade sig gøre..

Det er derfor jeg skriver herinde fordi det ikke umiddelbart ser ud til
at kunne lade sig gøre men måske kommer der nogen forbi som ved hvordan
man gør det.

> I øvrigt tror jeg også at det skal være en meget stor fil, for at det
> kan betale sig at gøre en masse krumspring.

Så lad os sige at filen er på 2 MB og skal indlæse hver eneste gang en
side vises på min hjemmeside.

> Du skal under alle omstændigheder både åbne og lukke filen

Det det der et spørgsmålet... om det er nødvendigt at åbne filen for at
læse den eller man kan nøjes med at åbne den for at skrive i den.

Det jo let nok at gøre hvis man vil tilføje data til slutningen af
filen. Der behøver man jo ikke at åbne filen for læsning.

Jeg kan bare ikke se hvorfor det skal være så besværligt at tilføje data
til starten af filen når det er så let til slutningen af filen.

Jeg kan godt lave min kode sådan at efter jeg har læst filens data ind i
et array så bruges jeg array_reverse() til at vende alle linierne det
virker men nu kunne jeg bare godt tænke mig det med at tilføje data i
starten.

Birger Sørensen (28-11-2010)
Kommentar
Fra : Birger Sørensen


Dato : 28-11-10 00:35

scootergrisen tastede følgende:
>> Tja - men det ser jo ikke ud til at kunne lade sig gøre..
>
> Det er derfor jeg skriver herinde fordi det ikke umiddelbart ser ud til at
> kunne lade sig gøre men måske kommer der nogen forbi som ved hvordan man gør
> det.
>
>> I øvrigt tror jeg også at det skal være en meget stor fil, for at det
>> kan betale sig at gøre en masse krumspring.
>
> Så lad os sige at filen er på 2 MB og skal indlæse hver eneste gang en side
> vises på min hjemmeside.
>
>> Du skal under alle omstændigheder både åbne og lukke filen
>
> Det det der et spørgsmålet... om det er nødvendigt at åbne filen for at læse
> den eller man kan nøjes med at åbne den for at skrive i den.
>
> Det jo let nok at gøre hvis man vil tilføje data til slutningen af filen. Der
> behøver man jo ikke at åbne filen for læsning.
>
> Jeg kan bare ikke se hvorfor det skal være så besværligt at tilføje data til
> starten af filen når det er så let til slutningen af filen.
>
> Jeg kan godt lave min kode sådan at efter jeg har læst filens data ind i et
> array så bruges jeg array_reverse() til at vende alle linierne det virker men
> nu kunne jeg bare godt tænke mig det med at tilføje data i starten.


for ( $idx = count( $dit_array)-1; $idx > -1; $idx--) {
// her behandles array element $dit_array[ $idx]
}

Der er ingen grund til at indsætte data først i en fil.
Med 2Mb data er dit projekt måske også bedre tjent med en database..?

En lidt hurtig forklaring på hvorfor det er svært at indsætte noget
først i filen, er at det der står først i filen, står først.
På HD'en defineres filen af BAM - Bit Allokation Map - og et index FAT
- File Allocation Table - som står på harddisken, i et område, der ikke
er normal filadgang til. (Hedder noget andet og virker anderledes på
NTFS, men principperne er de samme)
De bestemmer hvor filen starter - og der hvor filen starter, står det
første indhold.
Når du indsætter noget foran det eksisterende indhold, skal resten
flyttes. Uanset om du læser det med PHP eller lader OS'et tage sig af
det.
Alternativet er at rette FAT og BAM, hver gang du tilføjer noget - og
det dur i virkeligheden heller ikke til noget, med mindre du hver gang
indsætter præcis een allokeringsenhed (1024 byte typisk - men det
varierer fra HD til HD). Der kan ikke være 'ingenting' midt i en fil i
allokeringssystemet - hverken på FAT eller NTFS.

Så vend dit array på hovedet, eller tæl ned i stedet for op. Begge er
væsentligt enklere løsninger, end at indsætte noget først i en fil...

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



scootergrisen (28-11-2010)
Kommentar
Fra : scootergrisen


Dato : 28-11-10 00:46

> Der er ingen grund til at indsætte data først i en fil.

Selvfølgelig er der det.

> Med 2Mb data er dit projekt måske også bedre tjent med en database..?

Sikkert men nu ønsker jeg at bruge en fil.

> Når du indsætter noget foran det eksisterende indhold, skal resten
> flyttes.

Indholdet skal da også flyttes når jeg tilføjer noget til slutningen. Og
der indlæses filen jo ikke i PHP. Ik så vidt jeg ved i hvertfald.

Birger Sørensen (28-11-2010)
Kommentar
Fra : Birger Sørensen


Dato : 28-11-10 09:41

scootergrisen:
> Indholdet skal da også flyttes når jeg tilføjer noget til slutningen. Og der
> indlæses filen jo ikke i PHP. Ik så vidt jeg ved i hvertfald.

Nej, det skal det ikke.
FAT og BAM ved præcis hvor filen ender. Og i modsætning til begyndelsen
af filen, er det meget enkelt at flytte slutningen.

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Bertel Lund Hansen (28-11-2010)
Kommentar
Fra : Bertel Lund Hansen


Dato : 28-11-10 09:57

Birger Sørensen skrev:

> FAT og BAM ved præcis hvor filen ender. Og i modsætning til begyndelsen
> af filen, er det meget enkelt at flytte slutningen.

Man kan sammenligne det med at tilføje en etage til Rundetårn.
Det er ulige lettere at bygge til i toppen end at skyde en etage
ind under soklen.

--
Bertel
http://bertel.lundhansen.dk/         FIDUSO: http://fiduso.dk/

Henning (29-11-2010)
Kommentar
Fra : Henning


Dato : 29-11-10 09:04

On 2010-11-28 00:45, scootergrisen wrote:
> Indholdet skal da også flyttes når jeg tilføjer noget til slutningen. Og
> der indlæses filen jo ikke i PHP. Ik så vidt jeg ved i hvertfald.

Nejda.

Forestil din en stak papir. Du kan uden problemer lægge flere ark
ovenpå, men hvis du vil lægge et ark nederst i bunken er du nød til at
flytte hele bunken for at kunne komme til bunden af bunken.

Det er ret nøjagtigt på samme måde som i en fil.

/Henning


Henning (29-11-2010)
Kommentar
Fra : Henning


Dato : 29-11-10 09:01

On 2010-11-27 23:22, scootergrisen wrote:
> Så lad os sige at filen er på 2 MB og skal indlæse hver eneste gang en
> side vises på min hjemmeside.

Hvorfår vender du så ikke filen om, så du skriver i slutningen af filen,
eller putter ddet i en database?

> Det jo let nok at gøre hvis man vil tilføje data til slutningen af
> filen. Der behøver man jo ikke at åbne filen for læsning.
>
> Jeg kan bare ikke se hvorfor det skal være så besværligt at tilføje data
> til starten af filen når det er så let til slutningen af filen.

For at kunne tilføje i starten er du jo nød til at flytte alt
efterfølgende, for at få plads til det nye indhold.

/Henning

Karl Erik Christense~ (28-11-2010)
Kommentar
Fra : Karl Erik Christense~


Dato : 28-11-10 10:53

On 27-11-2010 22:27, Birger Sørensen wrote:

> Tja - men det ser jo ikke ud til at kunne lade sig gøre..
> Jeg mener som Karl Erik, at hvis det kan lade sig gøre, skal du åbne
> filen til både læsning og skrivning, og manipulere filepointteren. Men
> jeg tror bare, at den så vil overskrive det der står først i filen i
> forvejen.

> Birger
>

For nogle er det åbenbart lykkedes

Forfatteren af denne artikel mener i hvert fald at det kan lade sig gøre:

http://www.php-learn-it.com/php_files/php_file_write.html

Karl Erik.

--
http://www.tyveri-check.dk - Snyd tyven før han snyder dig!
http://www.ranunkelvej.com
http://webdesign.ranunkelvej.com - Artikler om webdesign


Birger Sørensen (28-11-2010)
Kommentar
Fra : Birger Sørensen


Dato : 28-11-10 11:12

Karl Erik Christensen forklarede den 28-11-2010:
> On 27-11-2010 22:27, Birger Sørensen wrote:
>
>> Tja - men det ser jo ikke ud til at kunne lade sig gøre..
>> Jeg mener som Karl Erik, at hvis det kan lade sig gøre, skal du åbne
>> filen til både læsning og skrivning, og manipulere filepointteren. Men
>> jeg tror bare, at den så vil overskrive det der står først i filen i
>> forvejen.
>
>> Birger
>>
>
> For nogle er det åbenbart lykkedes
>
> Forfatteren af denne artikel mener i hvert fald at det kan lade sig gøre:
>
> http://www.php-learn-it.com/php_files/php_file_write.html
>
> Karl Erik.

OK.
Forskellen er fil-mode.
dit eksempel - som jeg går ud fra er det grisen har afprøvet - bruger
mode a og det åbner kun filen for skrivning.
Mode a+ åbner for både læse og skrive. Og så virker det, iflg. det
referede.
Forskellen er at OS'et, skal læse filen, og flytte eksisterende
indhold, for at gøre plads til det nye.

fil-modes kan ses på
http://dk.php.net/manual/en/function.fopen.php

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Karl Erik Christense~ (28-11-2010)
Kommentar
Fra : Karl Erik Christense~


Dato : 28-11-10 11:20

On 28-11-2010 11:12, Birger Sørensen wrote:

> OK.
> Forskellen er fil-mode.
> dit eksempel - som jeg går ud fra er det grisen har afprøvet - bruger
> mode a og det åbner kun filen for skrivning.
> Mode a+ åbner for både læse og skrive. Og så virker det, iflg. det
> referede.
> Forskellen er at OS'et, skal læse filen, og flytte eksisterende indhold,
> for at gøre plads til det nye.
>
> fil-modes kan ses på
> http://dk.php.net/manual/en/function.fopen.php
>
> Birger
>

Nøø - Jeg har lige afprøvet eksemplet.
Teksten tilføjes i slutningen af filen.

Måske er der en bug i rewind?

Karl Erik.

--
http://www.tyveri-check.dk - Snyd tyven før han snyder dig!
http://www.ranunkelvej.com
http://webdesign.ranunkelvej.com - Artikler om webdesign


Henning (29-11-2010)
Kommentar
Fra : Henning


Dato : 29-11-10 08:57

On 2010-11-27 22:13, scootergrisen wrote:
>>> Men altså uden at skulle læse filen først... Kan du lade sig gøre ?
>>
>> http://dk.php.net/manual/en/function.file-get-contents.php
>>
>> $txt = file_get_contents( 'minfil.txt');
>> $txt = $nylinie.$txt;
>> file_put_contents( 'minfil.txt',$txt);
>
> Ja det er da en flot løsning.
> Men nu spurgte jeg jo om det kunne lade sig gøre uden... UDEN... :) at
> læse filens indhold først.

På kan kun tilføje i slutningen af filen, så en læs-tilføl-skriv er den
eneste mulighed.

> For jeg skal jo ikke bruge filens indhold til noget. Jeg skal bare
> tilføje noget nyt til filen. Så syns det virker som spild hvis filens
> indhold skal indlæses hver eneste gang.

Du kan tilføje i slutningen uden problemer.

/Henning

scootergrisen (29-11-2010)
Kommentar
Fra : scootergrisen


Dato : 29-11-10 10:49

> På kan kun tilføje i slutningen af filen, så en læs-tilføl-skriv er den
> eneste mulighed.

Ja det lader til at være den eneste løsning at skulle indlæse hele filen
først.

Michael Rasmussen (28-11-2010)
Kommentar
Fra : Michael Rasmussen


Dato : 28-11-10 11:37

On Sun, 28 Nov 2010 11:19:41 +0100
Karl Erik Christensen <karlerik@none.invalid.com> wrote:

>
> Måske er der en bug i rewind?
>
Jeg tror ikke, rewind kan anvendes på den måde. Hvis du udskifter a+
med r+, virker eksemplet dog.

--
Hilsen/Regards
Michael Rasmussen
http://pgp.mit.edu:11371/pks/lookup?op=get&search=0xE3E80917
A computer is like air conditioning: it becomes useless when you open
windows.


scootergrisen (28-11-2010)
Kommentar
Fra : scootergrisen


Dato : 28-11-10 19:43

Jeg har prøvet jeres eksempler men ja de virker ik.

Hvis nu jeg har en fil på harddisken. Den peger på et område på
harddisken fra her til der hvor dens data ligger.

Efter filens dataområde ligger jo andre fildata så man kan vil ikke bare
sige tilføj 1 GB data efter filen fordi så skal hele filen jo flyttes
til et nyt område på harddisken har jeg ret ?

Og det må jeg være noget OS'et eller harddisken gør automatisk og ikke
PHP. Altså indlæser det gamle fildata og flytter til et nyt område og
tilføjer de nye fildata i enden.

Er der nogen der kan forklare hvorfor det skulle være så svært at
tilføje til starten når det nu er så let at tilføje til slutningen.

Birger Sørensen (28-11-2010)
Kommentar
Fra : Birger Sørensen


Dato : 28-11-10 19:58

scootergrisen formulerede søndag:
> Jeg har prøvet jeres eksempler men ja de virker ik.
>
> Hvis nu jeg har en fil på harddisken. Den peger på et område på harddisken
> fra her til der hvor dens data ligger.
>
> Efter filens dataområde ligger jo andre fildata så man kan vil ikke bare sige
> tilføj 1 GB data efter filen fordi så skal hele filen jo flyttes til et nyt
> område på harddisken har jeg ret ?
>
> Og det må jeg være noget OS'et eller harddisken gør automatisk og ikke PHP.
> Altså indlæser det gamle fildata og flytter til et nyt område og tilføjer de
> nye fildata i enden.
>
> Er der nogen der kan forklare hvorfor det skulle være så svært at tilføje til
> starten når det nu er så let at tilføje til slutningen.

Nej. Hvis du tilføjer noget til slutningen af en eksisterende fil, og
der ikke er plads til det nye, bliver filen defragmenteret. Der
tilføjes så meget der kan der hvor den ligger - resten et andet sted -
FAT og BAM holder styr på de ting.
(Og hvis du har mange defragmenteringer læsning af filen langsommere.
Har du mange deframenterede filer, risikerer du at PC'en bliver
langsom. Det er derfor der findes defragmenteringsprogrammer. Og hvis
du nogensinde har brugt sådan et, ved du at de ikke arbejder hurtigt -
for det tager tid at samle alle stumperne til een klump igen.)

Filen fylder altid hele allokeringsenheden - kun den sidste kan være
delvist tom.
(Den mindste fil du kan oprete, fylder een allokeringsenhed. Det samme
gør foldere, som faktisk også er filer...)
Og begyndelsen kan ikke flyttes, uden det er temmelig omstændigt.

Og hvorfor har du fået forklaret een gang... Ellers brug Bertels
sammenligning med at sætte en ny etage nederst i et højhus. Det er en
udemærket illustration.

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



scootergrisen (28-11-2010)
Kommentar
Fra : scootergrisen


Dato : 28-11-10 20:08

Jo med det er vel så kun FAT der gør sådan.

Hvad med andre filsystemer de kan vel godt finde på at flytte alt data
til et nyt sted når der tilføjes noget eller hvad ?

Nu bruger jeg NTFS men det er vel også lige meget fordi PHP koden er jo
den samme lige meget hvad fil system man bruger ik ?

Michael Rasmussen (28-11-2010)
Kommentar
Fra : Michael Rasmussen


Dato : 28-11-10 11:50

On Sun, 28 Nov 2010 10:53:02 +0100
Karl Erik Christensen <karlerik@none.invalid.com> wrote:

>
> http://www.php-learn-it.com/php_files/php_file_write.html
>
Eksemplet virker ikke. Den simpleste måde at løse problemet på er:
<?php
$file_name= "myfile.txt";
if(file_exists($file_name))
{
   //open file for writng and place pointer at the end
   $myFile = file($file_name);

   if($myFile === false)
   {
      die("couldn't open file <i>$file_name</i>");
   }
   
   /* Add to begining of array */
   array_unshift($myFile, "Student ID: 12345");

   /* Write to existing file */
   if (file_put_contents($file_name, $myFile) !== false)
    echo "success writing to file";
   else
    echo "could not write to file";
}
else
{
   echo "file <i>$file_name</i> doesn't exists";
}
?>

--
Hilsen/Regards
Michael Rasmussen
http://pgp.mit.edu:11371/pks/lookup?op=get&search=0xE3E80917
A computer is like air conditioning: it becomes useless when you open
windows.


Michael Rasmussen (28-11-2010)
Kommentar
Fra : Michael Rasmussen


Dato : 28-11-10 18:46

On Sun, 28 Nov 2010 13:10:31 +0100
Birger Sørensen <sdc@bbsorensen.com> wrote:

>
> Det læser også hele filen, indsætter ny tekst i begyndelsen, og skriver hele filen igen.
>
Der findes heller ikke andre måder at gøre det på, da filer kun kan
vokse en vej.

--
Hilsen/Regards
Michael Rasmussen
http://pgp.mit.edu:11371/pks/lookup?op=get&search=0xE3E80917
A computer is like air conditioning: it becomes useless when you open
windows.


Michael Rasmussen (28-11-2010)
Kommentar
Fra : Michael Rasmussen


Dato : 28-11-10 20:46

On Sun, 28 Nov 2010 20:07:54 +0100
scootergrisen <scootergrisen@NOSPANKYOUgmail.com> wrote:

> Jo med det er vel så kun FAT der gør sådan.
>
FAT != filsystemet FAT fra MS. FAT betyder i denne sammenhæng File
Allocation Table, som oversat til dansk betyder, indeks over placering
af filers start.

--
Hilsen/Regards
Michael Rasmussen
http://pgp.mit.edu:11371/pks/lookup?op=get&search=0xE3E80917
A computer is like air conditioning: it becomes useless when you open
windows.


Bertel Lund Hansen (28-11-2010)
Kommentar
Fra : Bertel Lund Hansen


Dato : 28-11-10 20:51

Michael Rasmussen skrev:

> > Jo med det er vel så kun FAT der gør sådan.

> FAT != filsystemet FAT fra MS. FAT betyder i denne sammenhæng File
> Allocation Table, som oversat til dansk betyder, indeks over placering
> af filers start.

Ja, problemet er helt generelt uanset hvilket filsystem man
benytter [1].

[1] Jo, naturligvis kan det lade sig gøre at konstruere et
filsystem der som det primære krav har at det skal være let at
tilføje til starten af filen, men man vinder intet derved -
tværtimod.

--
Bertel
http://bertel.lundhansen.dk/         FIDUSO: http://fiduso.dk/

Søg
Reklame
Statistik
Spørgsmål : 177429
Tips : 31962
Nyheder : 719565
Indlæg : 6407948
Brugere : 218878

Månedens bedste
Årets bedste
Sidste års bedste