2013-03-27 118 views
0

我正在使用一些保存的数据以后使用它的应用程序。 我不能使用数据库,所以这必须是基于文件的。将数据添加到列表中并将其删除PHP

事情是这样的:

  • 称为HOSTS.TXT文件名包含主机:在每一行(DIFF主机和服务)的服务。
  • 我的PHP文件逐行读取txt,按分隔符“:”分隔,并用刚刚收到的数据发出请求。

直到这里,很酷。我还有另一个文件(一个HTML表单),允许我在文件末尾添加该文件。但我的问题是下一个:

我想能够添加和从文件中删除,所以当下一次检查完成(检查每30秒进行一次)数据应该更新。

例子:

host.txt包含此:

host1:service1 
host1:service2 
host2:service2 
host3:service1 

现在我希望能够添加新主机:服务列表(我已经通过添加新的做到了这一点数据在文本文件的末尾,然后将包括在下一次检查时,php将逐行读取 现在,我该如何从文件中删除主机:服务?

我的意思是,在读取文件,PHP会做出如下所示:

Host: Host1 | Service: Service1 | Status: Warning (this will depend on the HTTP request I will make)  (X) 
Host: Host1 | Service: Service2 | Status: OK  (X) 
Host: Host3 | Service: Service1 | Status: Critical  (X) 

我希望能够删除主机:从列表(文件)服务只是通过点击(X)。这是可能的家伙?我有点迷茫(对我来说,使用数据库很容易,但我不能在这个项目上)。

我希望我能弄清楚一些事情。 在此先感谢, 此致敬礼。

+0

你不能使用数据库,因为:你不知道如何?他们反对你的宗教?为什么?数据库是“文件”,基于文件也是如此。有基于txt文件的数据库系统的PHP和SQLITE。 – 2013-03-27 11:27:34

+0

@CaptainPayalytic:这是因为这必须进行本地检查,我无法在主机上安装SQL服务器。我有一个可移植的PHP软件来运行它(因为我不擅长JS)。 – usrb1n 2013-03-27 11:39:46

+0

正如我刚才所说,有基于txt的数据库系统的PHP(http://www.c-worker.ch/txtdbapi/manual_html_eng/)和SQLITE写入本地文件(您在开放语句中指定pathe)。所以你没有理由不能使用数据库! – 2013-03-27 11:43:19

回答

1

在PHP中,你想要做的事是这样的:现在

代码

$string = 'host1:service1 
host1:service2 
host2:service2 
host3:service1'; 

$splitted = explode("\n", $string); 

$data = array(); 

foreach ($splitted as $key => $value) { 
    $data[$key] = explode(':', $value); 
} 

echo '<pre>'; 
print_r($data); 
echo '<pre>'; 

你哈如果某些值匹配或是特定类别,您可以检查结构化数据。对输出的控制现在完全掌握在你的手中。

输出

Array 
(
    [0] => Array 
     (
      [0] => host1 
      [1] => service1 
     ) 

    [1] => Array 
     (
      [0] => host1 
      [1] => service2 
     ) 

    [2] => Array 
     (
      [0] => host2 
      [1] => service2 
     ) 

    [3] => Array 
     (
      [0] => host3 
      [1] => service1 
     ) 

) 

如果仍然有输出数据的问题,随便问一个评论,我会更新的答案。

+0

非常感谢。我已经有这样的东西,但没有一个字符串,我逐行阅读文件,然后爆炸“:”((编辑:对不起,我想添加一个新的行,但我保存))我的问题是,我想保存这些东西,我怎么知道我已经删除了哪一个数组或者有多少个新的数组?我的意思是如果我删除数组[2],但我增加了5个新的,我怎么知道它应该循环7次?我想我对此不太清楚,但如果你不明白,请告诉我。 – usrb1n 2013-03-27 11:35:14

+1

相当简单;你可以像这样读取文件的内容到字符串中; '$ string = file_get_contents('filename.txt')'。这样你就和我的答案中的字符串完全一样。如果你需要重新检查数组的长度,你可以在循环内执行一个“count($ array)”检查,这样你就可以确定下一步要做什么,或者如果需要'break;'则甚至可以中断循环。如果您想将旧数组(例如存储在SESSION中)映射到从新文件伪造的数组,则需要镜像这两个数组。参考:http://www.php.net/manual/en/function.array-diff.php :) – 2013-03-27 11:37:09

1

大致为:

1)做一个发生爆炸,让你有一个编号的阵列中文本文件进入。

2)设置每个线路的ID的HTML(整数每行数)

3)使具有一个jquery功能的“点击”听者

4)创建一个AJAX脚本具有整数作为输入

5)读取主机。TXT再次,去除用数字(未设置($阵列[“行号”]))

6)与进入内爆所对应的线,写入文件(覆盖旧的一个)

7)的重载页面(或隐藏行)

相关问题