Web-Tor Medlem sedan nov. 2000 13 890 inlägg Frågan 12 mars 2002 08:45 #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.
S SPiN Medlem sedan mars 2000 7 896 inlägg 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.
Web-Tor Medlem sedan nov. 2000 13 890 inlägg
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()
S SPiN Medlem sedan mars 2000 7 896 inlägg :r
1.
implode ()n ska se ut så här:
implode ( "", file ( "filen.txt" ) );
2.
ftruncate () tar filpekaren som parameter.
ftruncate ( $fil );
Web-Tor Medlem sedan nov. 2000 13 890 inlägg Tack Spin, 1:an funkar perfekt men jag fattar forfarande inte varför det blir fel på ftruncate ($fil); men skit samma.
S SPiN Medlem sedan mars 2000 7 896 inlägg Hm, kollade manualen nu... Då stod det att storleken skulle med också, som parameter.
Det borde alltså vara:
ftruncate ( $fil, 0 );
Vassego! :)
Web-Tor Medlem sedan nov. 2000 13 890 inlägg Jag tänkte väl att det var nåt som saknades. Tack!