Hey all!

Weet iemand hoe ik via de functie fwrite() *voor* de eerste regel kan schrijven? Dus Bovenaan het bestand waarin geschreven wordt. Bijv:

huidig bestand:
1
2
3
4
5

6 wordt toegevoegd:
6
1
2
3
4
5

snappie? :)

Alvast bedankt!
-S!ms
[php]fopen[/php]

scroll een klein stukje en je ziet het :)
Bij de user-comments van fwrite staat het volgende:
I needed to append, but I needed to write on the file's beginning, and after some hours of effort this worked for me:

$file = "file.txt";
if (!file_exists("file.txt")) touch("file.txt");
$fh = fopen("file.txt", "r");
$fcontent = fread($fh, filesize("file.txt"));

$towrite = "$newcontent $fcontent";

$fh22 = fopen('file.txt', 'w+');
fwrite($fh2, $towrite);
fclose($fh);
fclose($fh2);


Ik moet eerlijk bekennen dat ik geen betere oplossing weet. Met fseek zou je naar het begin van een bestand kunnen gaan met de pointer, maar ik ben bang dat als je dan vervolgens met fwrite gaat schrijven, hij de bytes die er al stonden niet opschuift maar overschrijft, of gewoon platweg een error geeft.

edit: nee, ik krijg het niet werkend om iets aan het begin van het bestand toe te voegen. Zowel modus op 'r+' als spelen met andere modus en [php]fseek[/php] heeft geen effect.
Bedankt voor je snelle reactie! Maar helaas werkt het niet.. ik zal waarschijnlijk wel weer eens wat over het hoofd hebben gezien maar ok :P

Dit is de fopen die ik gebruik:
$fp = fopen($filename, 'a');

'a' is toch goed, zoals php.net zegt? Hij plaatst alles nog steeds onderaan :)

edit: ups, verkeerd gelezen :$ :P

-S!ms
'a' Openen voor alleen schrijven; plaats de bestands pointer aan het einde van het bestand. Als het bestand niet bestaat, probeer het aan te maken.

'r+' Openen voor lezen en schrijven; plaats de bestands pointer aan het begin van het bestand.

Meer zeg ik echt niet meer...
Okay bedankt!

edit: Argh, nu overschrijft hij dus simpelweg de oude data, wat dus ook niet echt opschiet.. Hoe kan ik dit laten opschuiven? (of een new line maken) :)
Als reactie op Erik zijn post:
<?php
$fhandle = fopen('test.txt', 'r+');
//fseek($fhandle, 0);
fwrite($fhandle, 'Hello World' . mktime() . PHP_EOL);
fclose($fhandle);
?>
Heb ik geprobeerd, en hij herschrijft gewoon de eerste regel van het bestand.
@Emile

Gebruik de r+ die Sokaiya aanraadde, bij w+ staat het onderstaande:

"Open for reading and writing; place the file pointer at the beginning of the file and truncate the file to zero length. If the file does not exist, attempt to create it."

Betekenis:
"Open voor lezen en schrijven; plaats de bestandspointer aan het begin van het bestand en breng het bestand terug naar 0 lengte. (gooi het bestand dus leeg) Als het bestand niet bestaat, probeer het dan te maken.


[edit]
Dit schijnt dus niet te werken.
[/edit]
@jelmer, dat mktime() werkt ook niet helemaal.. krijg alleen een vage code terug.
@robert, zover was ik al :P
Toch bedankt allemaal!

Jelmer, kan je me dat misschien een klein beetje uitleggen? Ik weet niet of ik hier wat verkeerd doe, of dat die code verkeerd is ^.^
Jelmer,

dat klopt dan wel ja.
Maar dan maak je toch bij het schrijven van een nieuwe regel een enter :)
chr(10) en chr(13) uit m'n hoofd...
PHP_EOL == \n.... En dat is weer gelijk aan een enter op Unix-systemen. (Op Windows-bakjes heeft PHP_EOL overigens \n\r als waarde)

En mktime() is gewoon even om te kijken of hij is bijgewerkt of niet.

Reageren