|
| Skriv bestemt sted i fil, hvordan? Fra : Ukendt |
Dato : 07-06-06 09:21 |
|
Hej,
Jeg bruger følgende kode til at skriv i fil, og det virker fint,
MEN jeg vil gerne have $tekst placeret et bestemt sted i
filen test.php.
$filename = 'test.php';
$tekst = "Skriv denne tekst i fil\n";
$handle = fopen($filename, 'r+b');
fwrite($handle, $tekst);
Jeg har et "mærke" i filen test.php (// #GEM),
efter dette mærke vil jeg kunne sætte $tekst ind.
Kan man det og hvordan? Har prøvet at kigge på php.net
men kunne ikke lige finde noget der.
--
Med venlig hilsen
Jan Poulsen
| |
Michael Zedeler (07-06-2006)
| Kommentar Fra : Michael Zedeler |
Dato : 07-06-06 09:36 |
|
jp wrote:
> Jeg bruger følgende kode til at skriv i fil, og det virker fint,
> MEN jeg vil gerne have $tekst placeret et bestemt sted i
> filen test.php.
>
> $filename = 'test.php';
> $tekst = "Skriv denne tekst i fil\n";
> $handle = fopen($filename, 'r+b');
> fwrite($handle, $tekst);
>
> Jeg har et "mærke" i filen test.php (// #GEM),
> efter dette mærke vil jeg kunne sætte $tekst ind.
> Kan man det og hvordan?
Det kan man ikke. Du er nødt til at læse hele filen ind og oprette en ny
(eller erstatte den gamle).
Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
I am less likely to answer usenet postings by anonymous authors.
Visit my home page at http://michael.zedeler.dk/
| |
Ukendt (07-06-2006)
| Kommentar Fra : Ukendt |
Dato : 07-06-06 09:51 |
|
> Det kan man ikke. Du er nødt til at læse hele filen ind og oprette en ny
> (eller erstatte den gamle).
>
> Mvh. Michael.
okay, tak for svaret.
Mvh
Jan
| |
Martin (07-06-2006)
| Kommentar Fra : Martin |
Dato : 07-06-06 11:15 |
|
jp wrote:
> Hej,
>
> Jeg bruger følgende kode til at skriv i fil, og det virker fint,
> MEN jeg vil gerne have $tekst placeret et bestemt sted i
> filen test.php.
>
> $filename = 'test.php';
> $tekst = "Skriv denne tekst i fil\n";
> $handle = fopen($filename, 'r+b');
> fwrite($handle, $tekst);
$tekst = file_get_contents("test.php");
$tekst = str_replace("// #GEM","Skriv denne tekst i fil",$tekst);
unlink("test.php");
file_put_contents("test.php",$tekst);
>
> Jeg har et "mærke" i filen test.php (// #GEM),
> efter dette mærke vil jeg kunne sætte $tekst ind.
> Kan man det og hvordan? Har prøvet at kigge på php.net
> men kunne ikke lige finde noget der.
>
| |
Michael Zedeler (07-06-2006)
| Kommentar Fra : Michael Zedeler |
Dato : 07-06-06 12:01 |
|
Martin wrote:
> jp wrote:
>
>> Jeg bruger følgende kode til at skriv i fil, og det virker fint,
>> MEN jeg vil gerne have $tekst placeret et bestemt sted i
>> filen test.php.
>>
>> $filename = 'test.php';
>> $tekst = "Skriv denne tekst i fil\n";
>> $handle = fopen($filename, 'r+b');
>> fwrite($handle, $tekst);
>
> $tekst = file_get_contents("test.php");
> $tekst = str_replace("// #GEM","Skriv denne tekst i fil",$tekst);
> unlink("test.php");
> file_put_contents("test.php",$tekst);
Lige med den note at hvis filen er stor, er det ikke nogen god løsning,
da hele filen bliver indlæst i hukommelsen.
Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
I am less likely to answer usenet postings by anonymous authors.
Visit my home page at http://michael.zedeler.dk/
| |
Kasper Johansen (07-06-2006)
| Kommentar Fra : Kasper Johansen |
Dato : 07-06-06 12:11 |
|
Michael Zedeler wrote:
> Lige med den note at hvis filen er stor, er det ikke nogen god løsning,
> da hele filen bliver indlæst i hukommelsen.
>
> Mvh. Michael.
Lige til begyndere så er PHP faktisk utroligt hurtig til at udføre disse
replaces.
Desuden kan PHP afbryde sin replace, efter at den har fundet første
instans af det søgte. Ved fjerde argument på str_replace() kan man
angive et tal der afgør, hvor mange replaces der skal foretages af det
søgte.
F.eks.
<?
$text = "\"erstat mig\" bliver erstattet. \"erstat mig\" bliver ikke
erstattet.";
$text = str_replace("erstat mig", "med mig", $text, 1);
echo $text;
?>
Hvis du ved, at det søgte kommer tidligt i teksten, og det søgte kun
optræder, og skal erstattes, en gang, vil det stadigvæk gå hurtigere.
--
Med venlig hilsen
Kasper Johansen
| |
Michael Zedeler (07-06-2006)
| Kommentar Fra : Michael Zedeler |
Dato : 07-06-06 12:49 |
|
Kasper Johansen wrote:
> Michael Zedeler wrote:
>
>> Lige med den note at hvis filen er stor, er det ikke nogen god
>> løsning, da hele filen bliver indlæst i hukommelsen.
>
> Lige til begyndere så er PHP faktisk utroligt hurtig til at udføre disse
> replaces.
Jeps.
Men det er så noget helt andet. Hvis filen er stor, er dette her en
dårlig idé:
$tekst = file_get_contents("test.php");
Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
I am less likely to answer usenet postings by anonymous authors.
Visit my home page at http://michael.zedeler.dk/
| |
Martin (07-06-2006)
| Kommentar Fra : Martin |
Dato : 07-06-06 16:28 |
|
Michael Zedeler wrote:
> Men det er så noget helt andet. Hvis filen er stor, er dette her en
> dårlig idé:
>
> $tekst = file_get_contents("test.php");
Hvis du skal ændre noget i ca. midten af en fil, så kan det ikke gøres
på andre måder end at indlæse hele skidtet i hukommelsen og slette
filen, og oprette den igen, med den nye tekst.
Du kan evt. jævnføre din egen post :)
Men enig, der mangler en lidt bedre filehandler imo, især til at ændre
tekst i en fil.
| |
Bent Stigsen (07-06-2006)
| Kommentar Fra : Bent Stigsen |
Dato : 07-06-06 20:38 |
|
Martin wrote:
> Michael Zedeler wrote:
>
>> Men det er så noget helt andet. Hvis filen er stor, er dette her en
>> dårlig idé:
>>
>> $tekst = file_get_contents("test.php");
>
> Hvis du skal ændre noget i ca. midten af en fil, så kan det ikke gøres
> på andre måder end at indlæse hele skidtet i hukommelsen og slette
> filen, og oprette den igen, med den nye tekst.
Du kan uden problemer skrive hvor du vil i en fil. Problemet er hvis
"hullet" midt i filen skal gøres større eller mindre. Så må man igang med
at læse/skrive i det tempo man nu vælger.
> Du kan evt. jævnføre din egen post :)
>
> Men enig, der mangler en lidt bedre filehandler imo, især til at ændre
> tekst i en fil.
Man kommer ikke rigtigt udenom, at det er data der skal ned et sted hvor
"insert" og "backspace" ikke findes, så det kan kun blive til et glasur-lag
ovenpå de eksisterende funktioner.
MÃ¥ske en gang i fremtiden kan man lave et lagringsmedie af flydende
substans, hvor bit'sene bare flyder ud til siden, hvis man trykker 1
kilobyte ned et sted hvor der kun var et par bytes førhen.
/Bent
| |
Michael Zedeler (08-06-2006)
| Kommentar Fra : Michael Zedeler |
Dato : 08-06-06 00:00 |
|
Martin wrote:
> Michael Zedeler wrote:
>
>> Men det er så noget helt andet. Hvis filen er stor, er dette her en
>> dårlig idé:
>>
>> $tekst = file_get_contents("test.php");
>
> Hvis du skal ændre noget i ca. midten af en fil, så kan det ikke gøres
> på andre måder end at indlæse hele skidtet i hukommelsen og slette
> filen, og oprette den igen, med den nye tekst.
Jo. Du kan nøjes med at læse den linievis. Det sparer en masse hukommelse.
> Du kan evt. jævnføre din egen post :)
Jeg ved skam godt hvad jeg skrev.
> Men enig, der mangler en lidt bedre filehandler imo, især til at ændre
> tekst i en fil.
Denne her:
http://dk.php.net/manual/en/function.fopen.php
og denne her:
http://dk.php.net/manual/en/function.fread.php
kan gøre jobbet hvor man ikke læser det hele ind. Men det kræver noget
mere kode. Der findes tilsvarende funktioner til at oprette den nye fil.
Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
I am less likely to answer usenet postings by anonymous authors.
Visit my home page at http://michael.zedeler.dk/
| |
Kasper Johansen (07-06-2006)
| Kommentar Fra : Kasper Johansen |
Dato : 07-06-06 19:02 |
|
Michael Zedeler wrote:
> Men det er så noget helt andet. Hvis filen er stor, er dette her en
> dårlig idé:
> $tekst = file_get_contents("test.php");
<?
$count = -4096;
$fp = fopen("fil.txt", "r");
while(!feof($fp)){
$read_last = $read_current;
$read_current = fread($fp, 4096);
$count += 4096;
$pos = strpos($read_last . $read_current, "searchstring");
if ($pos !== false){
$tha_pos = $count += $pos;
break;
}
}
fclose($fp);
$fp_write = fopen("fil.txt", "w");
fseek($fp_write, $tha_pos, SEEK_SET);
fwrite($fp_write, "HaXor!");
?>
....så er spørgsmålet bare, hvordan vi læser resten af indholdet??
Det her er måske også et overkill :)
--
Med venlig hilsen
Kasper Johansen
| |
Rune Christensen (21-06-2006)
| Kommentar Fra : Rune Christensen |
Dato : 21-06-06 12:13 |
|
"jp" <rajadk 3 [AT] hotmail dot com> skrev i en meddelelse
news:44868c5f$0$60783$157c6196@dreader1.cybercity.dk...
> Hej,
>
> Jeg bruger følgende kode til at skriv i fil, og det virker fint,
> MEN jeg vil gerne have $tekst placeret et bestemt sted i
> filen test.php.
>
> $filename = 'test.php';
> $tekst = "Skriv denne tekst i fil\n";
> $handle = fopen($filename, 'r+b');
> fwrite($handle, $tekst);
>
> Jeg har et "mærke" i filen test.php (// #GEM),
> efter dette mærke vil jeg kunne sætte $tekst ind.
> Kan man det og hvordan? Har prøvet at kigge på php.net
> men kunne ikke lige finde noget der.
>
> --
> Med venlig hilsen
> Jan Poulsen
>
Kunne det være en mulighed at gemme det i en ny fil og så bare hente den nye
fil fra test.php med include
Mvh.
Rune
| |
|
|