2013-03-27 115 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)的重載頁面(或隱藏行)

相關問題