PHP - 删除文件的最后一个字符

14
我有一个小的php脚本,可以删除文件的最后一个字符。
$contents = file_get_contents($path);
rtrim($contents);
$contents = substr($contents, 0, -1);
$fh = fopen($path, 'w') or die("can't open file");
fwrite($fh, $contents);
fclose($fh);    

所以它读取文件内容,去掉最后一个字符,然后截断文件并将字符串写回其中。这一切都很好。

我的担心是,这个文件可能包含大量数据,file_get_contents()调用会在内存中保存所有这些数据,这可能会使我的服务器内存达到上限。

有没有更有效的方法来从文件中删除最后一个字符?

谢谢

1个回答

31

试试这个

$fh = fopen($path, 'r+') or die("can't open file");

$stat = fstat($fh);
ftruncate($fh, $stat['size']-1);
fclose($fh); 

更多帮助请参见此处


似乎这会将文件截断为0..?--啊,也许是因为fopen使用了w。但将其设置为r似乎也不起作用? - sulman
非常感谢你,Azat。现在运行得很好 :) - sulman
优雅的解决方案,甚至在C语言中也不知道有这个函数。 - John
5
如果你在去除尾部字符后想要添加新的字符,你需要使用fseek()函数将文件指针跳到当前文件大小的位置。如果不这样做,新的字符会填充在文件新旧大小之间,导致中间出现空字符。 $position = fstat($fh)['size'] - 1; ftruncate($fh, $position); fseek($fh, $position); - Joshua Dickerson
在CSV文件中,删除最后一个字符A0对我很有用。 - Meloman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接