簡體   English   中英

自我更新PHP + MySQL應用程序的最佳實踐是什么?

[英]What are best practices for self-updating PHP+MySQL applications?

現在,桌面應用程序可以自我更新,這是非常標准的做法。 在Mac上,在我的書中使用Sparkle的每個非Apple程序都是即時獲勝。 對於Windows開發人員, 已經詳細討論過這個問題 我還沒有找到有關自我更新的Web應用程序的信息,我希望您能提供幫助。

我正在構建一個像Wordpress或Drupal一樣安裝的Web應用程序 - 將其解壓縮到一個目錄中,點擊一些安裝頁面,它就可以了。 為了獲得廣泛的服務器兼容性,我被要求使用PHP和MySQL - 那是** MP嗎? 無論如何,它必須是廣泛的跨平台。 對於上下文,這基本上是針對小型企業的統一Web消息傳遞應用程序。 它不是另一個CMS平台,想想網絡郵件。

我想了解自我更新的Web應用程序。 首先,(1)這是一個壞主意嗎? 從Wordpress 2.7開始,自動更新只是一個按鈕,看起來很簡單,但我可以想象這么多的方式可能會非常糟糕,非常錯誤。 另外,網絡進程是不是可以寫入安全漏洞的想法?

(2)開發時間值得嗎? 世界上可能有數百萬個WP安裝,所以值得花時間讓WP團隊輕松實現,在全球范圍內節省數百萬工時。 我只能想象幾千個我的軟件安裝 - 正在構建自我升級值得花時間投資,還是我可以假設用戶足夠先進,下載和安裝網絡軟件可以通過升級核對清單?

如果這不是安全災難或浪費時間,那么(3)我正在尋找任何以前做過的人的建議。 你在數據庫中保留了一個版本表嗎? 你如何管理數據庫升級? 在自我更新的Web應用程序的上下文中,您使用什么方法回滾部分升級? 使用ORM層是否更容易或更難? 你是否保留了版本變化的三角形,或者你每次只是吹滅整個事物?

我很感激你對此的看法。

坦率地說,它確實取決於您的用戶群。 有大量PHP應用程序不會自動升級。 他們的用戶要么技術足以處理升級過程,要么就是不升級。

我的目的是兩個步驟:

1)認真地問自己用戶可能真正需要什么。 自我更新是否足以提高采用率以證明額外工作的合理性? 如果您確信答案是肯定的,那就去做吧。

既然你在這里問,我猜你還不知道。 在那種情況下,我的目的是第2步:

2)發布沒有該功能的1.0版。 等待用戶反饋。 您的用戶可能會立即為更簡單的升級過程而哭泣,在這種情況下您應該優先考慮它。 或者,您可能會發現您的用戶更關心其他一些功能。

在不詢問用戶的情況下猜測用戶的需求是一種浪費大量開發時間的好方法。

是的,如果PHP在沒有任何警告的情況下從互聯網上的某個地方覆蓋並覆蓋其文件,那將是一個安全功能。 無法保證服務器正確連接到您的更新服務器(如果發生DNS中毒,它可能會下載其他人制作的代碼) - 讓其他人訪問您客戶的數據。 因此,數字簽名很重要。

用戶可以通過在Web目錄上設置權限來控制更新,以便PHP只具有對文件的讀訪問權限 - 此過程可以簡單地記錄在您的程序中。

還有一個問題(我真的不知道答案):如果文件正在使用它們,PHP是否會覆蓋文件(例如,如果需要更新update.php文件本身)? 值得測試。

最近我一直在考慮數據庫模式的變化。 目前我正在深入研究WordPress以了解他們如何處理修訂版之間的數據庫更改。 這是我到目前為止所發現的:

$wp_db_version是從wp-includes/version.php加載的。 此變量對應於Subversion修訂版號,並在更改wp-admin/includes/schema.php時更新。 (可能通過鈎子?我不確定。)當加載wp-admin/admin.php ,從數據庫中讀取名為db_version的WordPress選項。 如果此數字不等於$wp_db_version ,則加載wp-admin/upgrade.php

wp-admin/includes/upgrade.php包含一個名為dbDelta()的函數。 dbDelta()掃描$wp_queries (將從頭開始創建最新數據庫模式的一串SQL查詢)並將其與數據庫中的模式進行比較,根據需要更改表,以使模式保持最新。

upgrade.php然后運行一個名為upgrade_all() upgrade_NNN()函數,如果$wp_db_version小於目標值,它將運行特定的upgrade_NNN()函數。 (即,如果數據庫版本小於7499,將運行WordPress 2.5.0升級的upgrade_250()upgrade_250()這些函數中的每一個都運行自己的數據遷移和填充過程,其中一些在初始數據庫設置期間調用腳本。 很好地減少了重復的代碼。

所以,這是一種方法。

我想你已經排除了這一點,但你可以將它作為一項服務托管。 (想想wordpress.com)

我建議您使用pear打包應用程序並設置一個頻道 然后,您的用戶可以通過標准界面(pear)升級應用程序。 它不是完全自動的(除非用戶在梨上運行某種自動化),但它是標准的,因此任何系統管理員都可以維護它。

我認為您最好的選擇是更新檢查機制,它會在有更新時提醒管理員。

如您所述,存在許多潛在的安全問題。 由於這些,我建議不要這樣做。 相反,嘗試創建一個相當智能的升級腳本。

只需我2美分:我認為CMS中的自動更新應用程序是一個安全漏洞,所以如果你決定編寫這個功能,你應該考慮實現這種行為的不同級別:

  • 自動更新
  • 檢查更新並通知
  • 禁用

暫無
暫無

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

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