簡體   English   中英

使用 PHP 替換平面文件數據庫中的一行

[英]Using PHP to replace a line in a flat-file database

關於這個類似的主題有很多不同的主題,但我還沒有完全理解我的問題的解決方案。

我想做的很簡單,我有一個平面文件數據庫,數據存儲如下 -

$username:$worldLocation:$resources

問題是我想要一個提交數據的 html 頁面,該頁面將根據使用 php 的術語搜索來更新此行

search db for - $worldLocation

if $worldLocation found

replace entire line with $username:$worldLocation:$updatedResources

我知道應該有一種相當簡單的方法來完成這項工作,但目前我無法弄清楚,我會繼續嘗試,因為這篇文章已經發布,但如果您知道我可以使用的方法,我將非常感謝您的幫助.

謝謝

我一直喜歡 c,以及從 c 進入 php 的函數。

查看fscanffprintf

這些將使您在以某種格式閱讀寫作時更輕松。 喜歡說:

$filehandle = fopen("file.txt", "c");
while($values = fscanf($filehandle, "%s\t%s\t%s\n")){
    list($a, $b, $c) = $values;
    // do something with a,b,c
}

此外,沒有避免reading the entire file into memory -> changing one line -> writing the entire file性能解決方法。 你必須這樣做。

這是盡可能有效的。 因為您很可能使用本機 c 代碼,因為我讀了一些 php 在這些情況下只包裝 c 函數的地方。

  1. 你喜歡艱難的方式就這樣吧......
  2. 使每條線的長度相同。 添加空格、制表符、大寫 X 等以填空
  3. 當你想更換線時,找到它,因為每條線的長度是固定的,你可以更換它。
  4. 為了提高速度和減少麻煩,請使用數據庫(甚至 SQLLite)

如果您致力於平面文件,最簡單的事情就是遍歷每一行,編寫一個新文件並更改匹配的文件。

是的,糟透了。

我強烈建議切換到“適當的”數據庫。 如果您擔心資源或運行服務器的復雜性,您可以查看 SQLite 或 Berkeley DB。 這兩者都使用“只是一個文件”的數據庫,消除了安裝和維護數據庫服務器的問題,但您仍然能夠快速輕松地搜索、替換和刪除單個記錄。 如果由於其他原因仍然需要平面文件,則可以輕松編寫一些導入/導出例程。

另一個有趣的可能性是,如果您想發揮創意,將您的文件系統視為一個數據庫。 給每個用戶一個目錄。 在每個目錄中,都有一個位置文件。 在每個文件中,更新資源。 這意味着,要插入一行,您只需寫入一個新文件。 要更新文件,您只需重寫單個文件。 刪除用戶只是破壞目錄。 當然,將整個內容放入內存中會產生更多的開銷。

解決問題的其他方法可能是使您的平面文件只寫,因為附加到文件末尾是一項微不足道的操作。 然后創建第二個文件,列出讀取平面文件時應忽略的“死”行號。 類似地,您可以輕松地“X”出現有行(這再次比嘗試更新文件中長度可能不同的行要容易得多)並將新數據附加到末尾。

后兩個想法並不是真正的實用解決方案,而是要向您展示解決問題的方法總是不止一種。

好的......經過幾個小時的工作......這個例子對我來說很好......我打算編寫一個編輯工具......並將其用於密碼更新......它做到了! 此頁面不僅使用新密碼向用戶發送和發送電子郵件(抱歉...地址被硬編碼以避免發布附加代碼)...而且它還為 w 用戶編輯條目並在新文件中重新寫入所有文件信息...完成后,它顯然會交換文件名,將舊文件存儲為 usuarios_old.txt。

在這里獲取代碼(抱歉,stackoverflow 對代碼發布非常挑剔)

https://www.iot-argentina.xyz/edit_flat_databse.txt

那是您所在的位置嗎:

update `field` from `table` set `field to replace` = '$username:$worldlocation:$updatesResources' where `field` = '$worldLocation';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM