/ 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
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



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408523
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste