[英]How to self-update PHP+MySQL CMS?
我在PHP + MySQL上編寫CMS。 我希望它是可自我更新的(在管理面板中單擊一下)。 什么是最佳做法?
如何比較當前版本的cms和更新版本(應用程序本身和數據庫)。 它應該只下載zip存檔,上傳和覆蓋文件嗎? (但是如何處理不再使用的文件)。 如何檢查更新是否正確下載? 它還支持模塊,我希望這些模塊可以從cms的管理面板下載。
我應該如何更新MySQL表?
如果您這樣做,最簡單的方法是完全下載新版本(無增量補丁),並將其解壓縮到與包含當前版本的目錄相鄰的目錄。 因為代碼目錄中不會有變量文件,所以您可以刪除或重命名舊文件並重命名新文件以替換它。
您可以將版本號保存在代碼中的全局常量中。
至於MySQL,除了為每個更改數據庫布局的版本制作升級腳本之外別無他法。 即使是更改表定義的自動解決方案也無法知道如何更新現有數據。
稍微更實驗性的解決方案可能是使用像phpsvnclient庫這樣的東西。
功能:
這樣,您可以查看是否有新文件,已刪除文件或更新文件,只能更改本地應用程序中的文件。
我認為這將有點難以實現,但好處可能是更容易,更快速地向CMS添加更新。
有一個名為SQLOO(我創建)的SQL庫試圖解決這個問題。 這有點粗糙,但基本思想是在PHP代碼中設置SQL模式,然后SQLOO更改當前數據庫模式以匹配代碼。 這允許SQL模式和附加的PHP代碼一起更改並以更小的塊更改。
http://code.google.com/p/sqloo/
http://code.google.com/p/sqloo/source/browse/#svn/trunk/example < - 示例
您有兩種方案需要處理:
這只是決定您是要解壓縮ZIP文件還是使用FTP來更新文件。 在以太網情況下,您的第一步是轉儲數據庫並備份現有文件,以便用戶可以在出現嚴重錯誤時回滾。 正如其他人所說,重要的是保留用戶可能在更新范圍之外定制的任何內容。 Wordpress很好地做到了這一點。 如果用戶對核心邏輯代碼進行了更改,他們可能足夠聰明,可以自行解決任何合並沖突(並且足夠聰明,知道單擊升級可能會丟失其修改)。
第二步是確保在瀏覽器關閉時腳本不會死亡。 這是一個真正不應該被打斷的過程。 您可以通過ignore_user_abort(true);
完成此ignore_user_abort(true);
或其他一些手段。 或者,如果您願意,允許用戶選中一個框,上面寫着“即使我斷開連接也會繼續”。 我假設你將在內部處理錯誤。
現在,根據權限,您可以:
然后你准備好:
en situ
更新。 然后你可以:
最重要的方面是確保在事情變糟時可以回滾更改。 要確保的另一件事是,如果您使用/ tmp,請務必檢查暫存區域的權限。 0600
應該做得很好。
看看Wordpress和其他人如何做到這一點。 如果您選擇的許可證和他們的許可證,您甚至可以重復使用某些代碼。
祝你的項目好運。
根據許多應用程序,CMS和其他方面的經驗,這是一種常見的模式:
我同意Bart van Heukelom的回答,這是最常見的做法。
唯一的另一種選擇是將CMS轉換為一組遠程Web服務/腳本和僅在一個位置托管的外部CSS / JS文件。
然后,使用CMS的每個人都將連接到您的中央“CMS服務器”,而他們(調用)服務器上的所有內容都是一堆腳本,用於調用執行所有處理和輸出的Web服務/腳本。 如果您沿着此路線走下去,則需要識別/驗證每個請求,以便返回給定CMS用戶的相應數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.