2013-10-21 28 views
1

我想将用户对我的网站的评论存储在一个txt文件中。 所以..我想知道如何使用PHP编辑txt文件内容。如何使用php编辑txt文件内容?

我的txt文件内容是这样的...

uid=5 
comment="Hello world" 
time="2013:11:21:xx:xx" 

uid=6 
comment="Test comment" 
time="2013:11:21:xx:xx" 

so..if我想编辑的uid = 5的评论,我怎么可以用PHP做。 或者告诉我一个更好的方法,内容应该放在文本文件中以使这个任务变得简单。

我不喜欢使用databse来存储我的意见。 请有人帮我解决这个问题。 Thansk

+1

你最好使用数据库。你将尝试实现你的“时间之鲸”。采取主动和使用数据库,我做了,这是我做过的最好的决定。你会通过**编辑HELL **编码,直到“奶牛回家”。 –

+1

更好的方法是使用数据库......您可以使用数据库节省大量的文本解析。在最坏的情况下,你可能会使用存储在文本文件中的JSON对象,但即使这样你也会头疼。 – Snowburnt

+0

您应该使用CSV文件来实现此功能 –

回答

2
$txt_file = file_get_contents('path/to/file'); 
$rows = explode("\n", $txt_file); //you get all rows here 
foreach ($rows as $row => &$data) { 
    if (strstr($data, 'uid=5') !== FALSE) { 
     //it means the following line contains your comment, 
     //work with it as string 
     $rows[$row + 1] = "comment=" . $newComment; 
    } 
    $data = $data . "\n"; 
} 
file_put_contents('path/to/file', $rows); 
+0

*“所以如果我想编辑** uid = 5的评论”* –

+0

Thansk你,这很简单,工作。我打算在网站上发布允许用户发表帖子和评论的网站。那里我要添加数据库中的帖子和存储在txt文件中的评论,并且我在表格行中放置了与帖子相关的txt文件的链接。 我这样做我倒了,这将MySQL数据库的速度足以在行的thousends内服务窗体?你认为这是一个好主意吗? – Milan

+0

我不太明白这个问题,但MySQL数据库可以很快处理数百万行。如果你刚刚开始你的网站,我认为你不应该担心数据库性能。当您的网站开始增长时,您可以开始考虑性能。 –

0

如果您没有可用的数据库服务器,我建议您使用SQLite。它像真正的数据库服务器一样工作,但它将数据存储在磁盘上的文件中。通过使用一个普通的文本文件,迟早你会遇到麻烦。

1

json提供了一种将数组序列化为字符串的简单方法。
使用json_decodejson_encode你可以将上面的例子转换成每行有一个json记录。

然后使用上面的答案一次读取一行,并寻找你想要的uid。只需对该行进行json_decode即可获得整个数组以供评论。

此方法允许您稍后更改注释中属性的数量和/或使某些属性为可选,而不会使文件解析变得复杂,或者依靠双空白链接或空白技巧来分隔记录。

文件示例

{ 'uid':'5','comment'='Hello world','time'='2013:11:21:xx:xx' }\r\n 
{ 'uid':'6','comment'='Hello world','time'='2013:11:21:xx:xx' }\r\n 
0

我同意Bhavik沙阿,如果你不能使用一个数据库,然后一个CSV会更容易的工作。不过,假设你不能做下面的任何一种解决方案,但不是最优雅的解决方案,而是一种解决方案。

$file = 'myfile.txt'; 
$fileArray = file($file); 
$reachedUser = false; 
for($i=0; $i<=count($fileArray); $i++){ 
    if(preg_match('/uid=6/', $fileArray[$i]) == 1){ 
     $reachedUser = true; 
     continue; 
    } 
    if($reachedUser && preg_match('/comment=/', $fileArray[$i])){ 
     $fileArray[$i] = "comment=\"This is the users new comment\"\n"; 
     break; 
    } 
} 
reset($fileArray); 

$fh = fopen($file, "w"); 
foreach($fileArray as $line){ 
    fwrite($fh, $line); 
} 
+0

morgunder的解决方案要容易得多。将您的文本文档转换为json文档。然后用json_decode来玩它。 –