webForumDet fria alternativet

Ändra innehåll i en textfil

PHP

6 svar · 296 visningar · startad av Web-Tor

Medlem sedan nov. 200013 890 inlägg
Frågan#1

Via ett formulär så vill jag ändra texten i en textfil. Problem är att den lägger till "skräp" i slutet av filen. Här är php-koden:

<?php if ($cmdSubmit){ 

$fil = fopen ("right.svg", "r+");
$innehåll = fread ($fil, filesize("right.svg"));

$sök = '|<rad1>(.*?)</rad1>|';
$ersätt = "<rad1>$flt1</rad1>";
$innehåll = preg_replace ($sök, $ersätt, $innehåll);

$sök = '|<rad2>(.*?)</rad2>|';
$ersätt = "<rad2>$flt2</rad2>";
$innehåll = preg_replace ($sök, $ersätt, $innehåll);

rewind ($fil);
fwrite ($fil, $innehåll);
fclose ($fil);

}
?>

I textfilen (right.svg) har jag följande text:

<rad1>text</rad1>
<rad2>text</rad2>

Det som står mellan <rad>-taggarna ersätts utan problem men ibland så lägger den till typ: 2> eller rad2> i slutat av filen.

Medlem sedan mars 20007 896 inlägg
#2

Testa följande istället:

<?php
if ($cmdSubmit) {
   $innehåll = implode ( "\n", file ( "right.svg" ) );
   $fil = fopen ("right.svg", "w");
   filesize("right.svg"));
   $sök = '|<rad1>(.*?)</rad1>|';
   $ersätt = "<rad1>$flt1</rad1>";
   $innehåll = preg_replace ($sök, $ersätt, $innehåll);
   $sök = '|<rad2>(.*?)</rad2>|';
   $ersätt = "<rad2>$flt2</rad2>";
   $innehåll = preg_replace ($sök, $ersätt, $innehåll);

   fwrite ($fil, $innehåll);
   fclose ($fil);
}
?>

Eller så kan du också testa det här:

<?php
if ($cmdSubmit) { 
   $fil = fopen ("right.svg", "r+");
   $innehåll = fread ($fil, filesize("right.svg"));
   $sök = '|<rad1>(.*?)</rad1>|';
   $ersätt = "<rad1>$flt1</rad1>";
   $innehåll = preg_replace ($sök, $ersätt, $innehåll);
   $sök = '|<rad2>(.*?)</rad2>|';
   $ersätt = "<rad2>$flt2</rad2>";
   $innehåll = preg_replace ($sök, $ersätt, $innehåll);
   ftruncate ($fil);
   fwrite ($fil, $innehåll);
   fclose ($fil);
}
?>

I exempel två använder jag ftruncate () istället för rewind (), för att ställa pilpekaren till postition 0 och ta bort allt i filen. Där tror jag att du hade ditt problem, då mode r+ som du öppnade filen med, inte trunkerar filen och lämnar kvar allt i den. När du sedan skrev till filen, och skrev färre tecken än vad den hade från början, så blev dessa kvar. I exempel ett läser jag filen separat med file (), och skriver till den separat - och trunkerar filen vid öppnandet av den.

Medlem sedan nov. 200013 890 inlägg
#3

När du sedan skrev till filen, och skrev färre tecken än vad den hade från början, så blev dessa kvar.

Där tror jag att du har rätt men dina exempel funkade inte riktigt.

1. Den la till en extra radmatning på varje rad.

2. Warning: Wrong parameter count for ftruncate()

Medlem sedan mars 20007 896 inlägg
#4

:r

1.
implode ()n ska se ut så här:

implode ( "", file ( "filen.txt" ) );

2.
ftruncate () tar filpekaren som parameter.

ftruncate ( $fil );
Medlem sedan nov. 200013 890 inlägg
#5

Tack Spin, 1:an funkar perfekt men jag fattar forfarande inte varför det blir fel på ftruncate ($fil); men skit samma.

Medlem sedan mars 20007 896 inlägg
#6

Hm, kollade manualen nu... Då stod det att storleken skulle med också, som parameter.

Det borde alltså vara:

ftruncate ( $fil, 0 );

Vassego! :)

Medlem sedan nov. 200013 890 inlägg
#7

Jag tänkte väl att det var nåt som saknades. Tack!

351 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
220 ms — ändringar (db)