2014-01-14 66 views
1

所以我有一箇舊網站,它被編碼了很長一段時間,但已經停用了3年左右。我擁有完整的PHP源代碼,但問題是我沒有數據庫的備份。我想知道重新創建數據庫的最佳解決方案是什麼?這是一個大型站點,因此需要手動瀏覽每個PHP文件,並試圖跟蹤哪些表被引用是一項不小的任務。我試過Google的搜索結果,但沒有運氣。有誰知道任何可用的工具來幫助從PHP中提取這些信息,並且至少給我一個數據庫框架的基礎?否則,有沒有人曾經這樣做?有什麼提示可以幫助我,並有可能加快這個過程?這是我嘗試使用的mySQL數據庫。使用現有的PHP代碼重新創建數據庫

+0

你可以發佈你想要添加到數據庫中的文件的例子嗎? –

+0

他不想添加文件。他想從代碼中反向設計數據庫。但是,根據所提供的信息,我們只能猜測php如何訪問數據庫。 –

+0

這將是一個問題。即使您可以從代碼中提取項目,您也永遠無法獲得完整的數據庫圖片,包括表級ID,關鍵約束,查找表等。 –

回答

1

我會做它的方式:

寫SQLI的子集或任何界面來訪問數據庫攔截所有DB訪問。 用您的虛擬版本替換所有數據庫訪問。

其基本思想是模擬數據庫,以便PHP代碼運行足夠長的時間以激活各種數據庫訪問,從而使您可以分析數據庫的構建和使用方式。

從這些虛函數中:

  • 打印的SQL代碼中使用
  • 產生僅僅足夠多的僞結果讓代碼運行的其餘部分,根據查詢中提到的表和字段參數檢索它們的PHP代碼(你不會從SELECT *學到太多東西,但你可以看到PHP代碼期望從它得到什麼字段)
  • 一旦你已經瞭解了足夠的DB結構,重新創建表並讓原始代碼工作他們一點一點地
  • 有以前的設計師鞭打死刑沒有提供一種方法來重新創建數據庫編程
0

根據您提供的信息,目前有兩個答案。

1)你不能這樣做 PHP是一種無類型語言。你可以檢查你的sql語句來查找字段和表名。但它不會完成。如果有select * from table,則看不到字段。所以你需要檢查那裏的PHP訪問領域。可能是通過名稱或索引。如果這是通過名稱完成的,您可能會很高興,因爲您可以提取字段的名稱。最後數據類型將會丟失。還缺少:哪裏是索引,什麼是主鍵,約束等。

2)容易,是的,你可以! ,因爲你的php正在使用一個包含orm的現代框架。這爲你創建了數據庫。元信息包含在php類/設計中。 只需檢查手冊如何重新創建數據庫。

相關問題