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