[英]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 的函數。
這些將使您在以某種格式閱讀寫作時更輕松。 喜歡說:
$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 函數的地方。
如果您致力於平面文件,最簡單的事情就是遍歷每一行,編寫一個新文件並更改匹配的文件。
是的,糟透了。
我強烈建議切換到“適當的”數據庫。 如果您擔心資源或運行服務器的復雜性,您可以查看 SQLite 或 Berkeley DB。 這兩者都使用“只是一個文件”的數據庫,消除了安裝和維護數據庫服務器的問題,但您仍然能夠快速輕松地搜索、替換和刪除單個記錄。 如果由於其他原因仍然需要平面文件,則可以輕松編寫一些導入/導出例程。
另一個有趣的可能性是,如果您想發揮創意,將您的文件系統視為一個數據庫。 給每個用戶一個目錄。 在每個目錄中,都有一個位置文件。 在每個文件中,更新資源。 這意味着,要插入一行,您只需寫入一個新文件。 要更新文件,您只需重寫單個文件。 刪除用戶只是破壞目錄。 當然,將整個內容放入內存中會產生更多的開銷。
解決問題的其他方法可能是使您的平面文件只寫,因為附加到文件末尾是一項微不足道的操作。 然后創建第二個文件,列出讀取平面文件時應忽略的“死”行號。 類似地,您可以輕松地“X”出現有行(這再次比嘗試更新文件中長度可能不同的行要容易得多)並將新數據附加到末尾。
后兩個想法並不是真正的實用解決方案,而是要向您展示解決問題的方法總是不止一種。
好的......經過幾個小時的工作......這個例子對我來說很好......我打算編寫一個編輯工具......並將其用於密碼更新......它做到了! 此頁面不僅使用新密碼向用戶發送和發送電子郵件(抱歉...地址被硬編碼以避免發布附加代碼)...而且它還為 w 用戶編輯條目並在新文件中重新寫入所有文件信息...完成后,它顯然會交換文件名,將舊文件存儲為 usuarios_old.txt。
在這里獲取代碼(抱歉,stackoverflow 對代碼發布非常挑剔)
那是您所在的位置嗎:
update `field` from `table` set `field to replace` = '$username:$worldlocation:$updatesResources' where `field` = '$worldLocation';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.