2010-03-15 61 views
2

在我的Web應用程序中,用戶可以下載包含應用程序文件的.tar.gz存檔。但是,由於MySQL數據庫不會被配置,因此用戶需要運行位於./install的安裝腳本。如何檢測程序的第一次運行?

我第一次運行應用程序時,通過檢查./install目錄是否存在,「抓住」用戶。如果是這樣,index.php頁面將用戶重定向到安裝腳本。

但是,我想知道是否有一個更優雅的方式來「抓住」用戶在第一次運行的程序。

IRC上的某個人建議web服務器在完成時創建一個文件.installed,但由於Web服務器可能沒有寫入Web根目錄的權限,所以我不能依賴它。

你將如何去解決這個問題,或者我的解決方案是否可行?

+0

我認爲這是一個很好的解決方案。但是如果你沒有寫權限,你怎麼刪除'install'目錄? – 2010-03-15 19:20:18

+0

在我的應用程序?我要求用戶在安裝後執行此操作。 :) – 2010-03-18 14:46:30

回答

3

當MySQL查詢失敗並顯示錯誤代碼1146時,表示這些表不存在。您可能正在尋找這樣的錯誤,因爲它們或者意味着軟件未安裝,或者安裝已損壞。

正如Julian H. Lam在評論中所述,mysql_errno()函數返回該錯誤號。如果是MySQLi,它可以是屬性$connection->errno或函數調用mysqli_errno($link)

+1

這是一個很好的解決方案,因爲它也會處理用戶由於某種原因刪除數據庫的不可避免的情況。 – 2010-03-15 19:37:18

+0

我喜歡這個......它比使用php exec()更好,但我仍然害怕這樣做。 – 2010-03-17 20:31:33

+0

對於那些想知道的人: mysql_errno()返回錯誤號。 – 2010-03-18 14:47:02

0

除了你提供的解決方案,我可以認爲你做了相反的事情:添加一個.not-installed文件到你的tar並在安裝完成後刪除。

+0

但我仍然需要寫權限來刪除文件,是嗎? 我不能總是依靠最終用戶來保留www-data所擁有的應用程序,我可以嗎?我傾向於不這樣做,但我可能會以「錯誤的方式」做事...... – 2010-03-15 19:21:58

+0

@Julian H. Lam:那麼您可以指定您的應用程序需要寫入權限才能工作。我不認爲例如WordPress的工作方式不同。它也需要寫入權限。 – 2010-03-15 19:23:43

+0

是的,我知道的任何CMS都需要您手動刪除文件(或文件夾)或將寫入權限寫入安裝文件夾。 – soulmerge 2010-03-15 19:31:52

0

大多數Web應用程序(wordpress,drupal等)都假設它是缺少文件設置或文件存在時的首次運行條件。 通過刪除或迫使用戶在第一次運行應用程序時刪除文件,您還可以保證安全,因爲應用程序無法通過刪除或更改文件名來重新配置......這可能更容易做到比創建一個新文件並模擬其內容。

更高級的框架將讀取和修改配置文件以指示第一次運行。 在您將讀取的Zend Framework應用程序中,然後修改其中一個安裝配置文件。

由於Web應用程序在接收到請求時執行代碼,因此您不希望再次執行的代碼應該被刪除或在「公共」目錄之外。 與重新運行的設置非常有關的項目完全刪除設置文件。

在你的安裝,你可以檢查寫權限的URL根,如果你缺乏他們告訴用戶刪除setup.php(例如)

 
    $delete = False; 
    $dir = dirname(__FILE__); 
    if(is_writeable(__FILE__)) { 
    if(unlink(__FILE__)) { 
     $delete = True; 
    } 
    } 

    if(!$delete) { 
    $file = __FILE__ 
    print "IMPORTANT please remove/rename the file {$file} to complete installation" 
    } 
相關問題