2010-07-25 41 views
3

在我的網站的管理區域中有一個表單,用於網站使用的mysql數據庫的主機名,用戶名和密碼。目前這些值被硬編碼爲一個php類。但是我可以鏈接誰,以便表單可以編輯php類中的變量(並將結果保存在服務器上,換句話說,變量是硬編碼的)。我通常會把這樣的東西放在數據庫中,但顯然這是無法完成的。在沒有數據庫的情況下永久保存php變量

+0

可能重複的[PHP,閱讀文件](http://stackoverflow.com/questions/2237291/php-reading-file) – Gordon 2010-07-25 10:09:10

+1

哦,不要這麼迂腐,這是關於寫作,而不是閱讀文件。 – 2010-07-25 10:32:35

回答

4

將值保存在配置文件中。並確保它無法通過網絡訪問。

最簡單的解決方案是將值保存在配置數組中 - 用戶輸入值,然後從中生成一個數組,然後file_put_contents("config.php", "<?php $config = " . var_export($config))。有了這個方法,無論何時你需要配置數組,你所需要做的就是include config.php,它就在那裏。

這是未經過測試的代碼,僅用於舉例目的。根據你的情況,你可能需要解決競爭條件,file_put_contents是不夠的。上面代碼的主要點是:var_export返回有效的php代碼,你可以eval(如果你足夠邪惡的話)或迴應到一個文件,並在稍後加入。

+0

這是如何工作的,如果我想在第一次創建配置文件時進行修改。 – 2010-07-25 09:55:36

+0

@Jonathan您可以修改已經加載的'$ config'數組,然後再次執行'file_put_contents'部分。 – Maerlyn 2010-07-25 10:03:17

+0

所以只需重新創建文件? – 2010-07-25 10:27:38

5

創建配置文件,並授予您的Web服務器對其的寫入權限。然後,只需編寫一個將DB配置保存到此文件的腳本即可。例如。

$fh = fopen('config.php', 'w'); 
fwrite($fh, chr(60) . "?php\n"); 
fwrite($fh, sprintf("define('DB_HOST', '%s');\n", addslashes($_POST['DB_HOST']))); 
fwrite($fh, sprintf("define('DB_USER', '%s');\n", addslashes($_POST['DB_USER']))); 
fwrite($fh, sprintf("define('DB_PASS', '%s');\n", addslashes($_POST['DB_PASS']))); 
fclose($fh); 
+0

這是如何工作的,如果我想在第一次創建配置文件時對其進行修改。 – 2010-07-25 09:45:53

+0

你會把配置文件創建代碼放在另一個腳本editconfig.php中。 – jmz 2010-07-25 10:38:36

相關問題