2012-10-17 44 views
1

我一直在開發PHP頁面幾個星期,現在我的代碼變得更加自信了。我已經通過Bluehost獲得了一個託管帳戶,並準備開始製作一些活頁面。以前我一直在Windows上使用XAMPP,並在本地計算機上開發我的所有頁面。我試圖確定在本地創建我的頁面然後輕鬆將其移至我的託管服務器的最佳做法。我使用Filezilla來傳輸我的文件。這裏是我的主要問題:將PHP從開發推向生產

1.)我如何確保我的本地和實時MySQL數據庫保持同步?我一直在本地手動創建數據庫,然後採用相同的代碼並將其應用於我的實時服務器。 (我有phpmyadmin本地和現場服務器,但不知道如何使用它來簡化這一過程)

2.)我必須更改所有文件的mysql密碼和連接憑據,然後將它們從本地服務器移動到活服務器。有沒有解決的辦法?

回答

3

對於問題1,您可以轉儲數據庫並在每次上傳時將其導入生產端,也可以使用mysql複製。

問題2這是很常見的有一個單獨的PHP文件數據庫連接的細節,然後包括該文件在需要連接到數據庫

然後你可以在每個網頁的頂部更改該文件,或者只上傳具有生產數據庫詳細信息的那個文件。

db.php中

<?php 
$dbuser=""; 
$dbpass=""; 
$dbname=""; 
$dbserver=""; 
?> 

myfile.php

<?php 
include("db.php"); 
$conn = mysql_connect($dbserver, $dbuser, $dbpass); 
mysql_select_db($dbname); 
//.... 
?> 
+0

感謝您的深入瞭解 – user1613223

+0

如果您在開發時轉儲數據庫並導入生產,您將丟失所有生產數據。我不認爲你會想要它。我永遠不會複製生產數據庫的開發數據庫。原因很明顯。 –

+0

是的,這是有道理的。但是「可能」是開發數據是真實數據的場景。一個罕見的情景當然,但不完全在幻想領域。 – case1352

0

你可以點你的mysql_connect()主機到新服務器的IP地址。因此,無論您的代碼位於何處,它都將連接到套接字。

$link = mysql_connect('<your ip here>', 'mysql_user', 'mysql_password'); 
0

我總是讓我的項目,以便我必須更改1行代碼以在開發和生產之間波動。

我在那裏我指定我的環境是這樣一個基本文件:

$env = 'dev' 
在我的數據庫設置變量

然後,我有這樣的事情:

if($env == 'dev') { 
    specify dev variables 
} else if($env == 'prod') { 
    specify prod variables 
} 

這樣做的好處是,當我想在dev和prod之間移動,我只需要更改1個變量。

+0

常數是另一種選擇。 –

+0

我喜歡這種方法。感謝分享 – user1613223

0

使用版本控制系統,如svn或git;查看phpmig進行數據庫管理,查看部署工具(如capistrano),確保在生產服務器的副本上進行測試(即使您只是使用虛擬主機)

+0

卡皮斯特拉諾不僅僅是用於鐵軌嗎? – Catfish

+0

@Catfish - capistrano是用Ruby編寫的,但它的使用不限於Ruby應用程序......我毫不費力地將它用於PHP應用程序,因爲它不關心它從VCS複製或從VCS中獲取的代碼的語言寫在 –

+0

哦有趣。我沒有意識到這一點.. – Catfish

0

我幾乎處於相同的位置你和我在這裏是我打算如何做的。

  1. 我不打算同步我的本地數據庫與實時單只是移動本地數據庫一次網上之一,當我完成了。我這樣做只是在PHPMyAdmin中選擇我想要的數據庫並將其導出爲.sql文件。然後在在線服務器上,我只需導入該文件。

  2. 我所知道的最好的辦法是有一個單獨的文件,你有一個函數,它看起來是這樣的:當你想使用剛纔導入的文件中

    function connectToDB(){ $mysqli = new mysqli("localhost", "root", "123", "myDatabase"); return $mysqli; }

    然後您的其他PHP文件的頂部,使用它像這樣:

    $mysqli = connectToDB();

這是我的這樣做的方式。如果有人知道更好的方法,我會很高興知道它。

0

從開發部署到生產並不是一項簡單的任務,而且可能非常複雜。公司投入大量資源以使部署成爲一個合理且穩定的過程。我建議把你的問題分成幾部分,並提出更具體的問題。

至於回答您的問題,我會怎麼做:

1)當部署需要在數據庫中的結構發生了變化,在寫SQL腳本這些變化。當你部署時,你需要運行這些腳本並更新代碼(正如你所知道的那樣,時間會使應用程序不穩定或破壞)。在此之前,請將生產數據庫的副本放到開發中,並在開發時首先嚐試腳本。每次部署時都會同步獲取數據庫。

2)你如何保存密碼取決於你是否使用框架。在框架之後,根據環境(開發或生產)定義環境變量並設置密碼是一種好方法。

至於代碼部署,即使您是獨特的開發人員,我也會使用svn或git將您的項目保存在版本控制下。它將使代碼更新變得更加簡單,並在需要時爲每個部署創建標籤以幫助您回滾。

0

最佳做法是編寫數據庫遷移腳本,並對它們進行版本化。然後,每次上傳到生產時,都會將這些版本的值存儲在數據庫中。只運行你以前沒有運行過的版本。

在存儲庫之外有不同的本地配置文件。這使您可以使用主配置文件在repo中維護必要的應用程序配置,然後本地配置文件將覆蓋數據庫和環境設置。