2

有没有办法使用 PHP 从文件中追加或删除一行文本。

我正在为我的特定网络托管堆栈编写一个托管控制面板,并希望能够以最低要求对文件进行更改以接触文件系统,因此不必重写整个文件以添加或删除配置选项。

4

5 回答 5

2

如果不先将文件解析为行然后再次写出,就无法从文件中删除一行。

您可以使用fopen并将其$mode设置为“a”来附加到文件

$fp = fopen('myfile', 'a');
于 2010-02-14T10:40:55.573 回答
2

对于追加,您应该fopen$modeof一起使用a

请参阅this,了解如何从文件中删除一行。

于 2010-02-14T10:42:45.010 回答
1

是的,您可以以附加模式打开文件:

$fh = fopen('testFile.txt', 'a');

如果您现在写入文件,则会附加新内容。

参见fopen并从此文档:

'a' : 只为写入而打开;将文件指针放在文件末尾。如果该文件不存在,请尝试创建它。

但是,删除最后一行是不可能的。

于 2010-02-14T10:40:26.253 回答
0

如果您需要更改文件中间的某些内容,则必须读取它,解析它并将其保存回来。否则,您只能在其末尾附加一些内容。

不过,您不应该担心此操作的成本,因为它是一个配置文件,不可能每秒更改一百次,它应该花费的时间可以忽略不计。

如果您希望在访问/更新/删除方面更灵活,我认为您应该考虑将配置文件移动到数据库表中。

于 2010-02-14T10:47:52.713 回答
0

在 PHP 中处理文件充满了陷阱,尤其是并发和锁定。您正在编写配置文件这一事实也意味着您公开的任务通常仅对具有网络 root 权限的用户可用。您在帖子中没有提到这些事情,但与解决这些问题相比,您的问题微不足道。

关于您的问题-尽管实现您的建议相当微不足道(例如,通过执行 sed-尽管您没有说这是在哪个操作系统上运行),但我建议以其他表示形式创建原始文件的副本-显而易见的候选者将是一个数据库 - 您可以在其中将序列号应用于行并轻松创建要填充的间隙,或者存储在会话中的 PHP SplDoublyLinkedList。然后,一旦用户根据需要进行了尽可能多的更改,就可以从工作表示中通过单个操作重新生成文件。

请注意,最终,无论您如何实现该解决方案,该解决方案都将重写整个文件——这只是在您的代码中公开了多少此过程的问题。

请记住,您所做的与大多​​数 php Web 脚本相同 - 除了它们操作和重新生成 HTML 时,您使用的是不同的文件类型 - 所以您可能想看看其他 PHP 模板系统如何已编写完毕,并考虑是否可以为配置文件创建模板。

高温高压

C。

于 2010-02-15T00:08:25.817 回答