【发布时间】:2010-02-14 10:37:28
【问题描述】:
有没有办法使用 PHP 从文件中追加或删除一行文本。
我正在为我的特定网络托管堆栈编写一个托管控制面板,并希望能够以最低要求对文件进行更改以接触文件系统,因此我不想重写整个文件以添加或删除配置选项。
【问题讨论】:
-
你能澄清一下 - 你能保证配置选项总是在最后一行吗?
标签: php text file-processing
有没有办法使用 PHP 从文件中追加或删除一行文本。
我正在为我的特定网络托管堆栈编写一个托管控制面板,并希望能够以最低要求对文件进行更改以接触文件系统,因此我不想重写整个文件以添加或删除配置选项。
【问题讨论】:
标签: php text file-processing
【讨论】:
对于追加,您应该使用fopen 和a 的$mode。
See this please,关于如何从文件中删除一行。
【讨论】:
是的,您可以以附加模式打开文件:
$fh = fopen('testFile.txt', 'a');
如果您现在写入文件,则会附加新内容。
请参阅fopen 和此文档:
'a':只供书写;将文件指针放在文件末尾。如果文件不存在,请尝试创建它。
虽然不能删除最后一行。
【讨论】:
在 PHP 中处理文件充满了陷阱,尤其是并发和锁定。您正在编写配置文件这一事实也意味着您公开的任务通常仅对具有网络 root 权限的用户可用。您在帖子中没有提到这些事情,但与解决这些问题相比,您的问题微不足道。
关于您的问题 - 尽管实施您的建议相当简单(例如,通过执行 sed - 尽管您没有说这是在哪个操作系统上运行),但我建议您在某些文件中创建原始文件的副本其他表示 - 明显的候选者将是数据库 - 您可以将序列号应用于行并轻松创建要填充的间隙,或存储在会话中的 PHP SplDoublyLinkedList。然后,一旦用户根据需要进行了尽可能多的更改,就可以从工作表示中通过单个操作重新生成文件。
请注意,最终,无论您如何实现该解决方案,该解决方案都会重写整个文件 - 这只是在您的代码中公开了多少此过程的问题。
请记住,您所做的与大多数 php Web 脚本相同 - 除了它们操作和重新编写 HTML 时,您使用的是不同的文件类型 - 所以您可能想看看其他PHP模板系统写好了,考虑是否可以为你的配置文件创建模板。
HTH
C.
【讨论】:
如果您需要更改文件中间的某些内容,则必须读取、解析并保存回来。否则,您只能在其末尾附加一些内容。
不过,您不必担心此操作的成本,因为它是一个配置文件,不太可能每秒更改一百次,它所花费的时间应该可以忽略不计。
如果您想要更灵活地访问/更新/删除,我认为您应该考虑将配置文件移动到数据库表中。
【讨论】: