2015-04-03 65 views
2

用define()存儲數據庫連接細節是好還是不好?用define()存儲數據庫連接細節是好還是不好?

define('DB_HOST', 'localhost'); 
define('DB_USER', 'root'); 
define('DB_PASS', 'xxx'); 
define('DB_NAME', 'xxx'); 

或更好的數組下面?

$config['db'] = array(
    'driver' => 'mysql', 
    'host'  => 'localhost', 
    'port'  => '3306', 
    'user'  => 'someuser', 
    'password' => 'SuperSecretPassword', 
    'name'  => 'db_name', 
); 

我注意到,流行的框架,比如Zend或Symfony的不使用定義此配置。

笨,

$db['default']['hostname'] = 'localhost'; 
$db['default']['username'] = ''; 
$db['default']['password'] = ''; 
$db['default']['database'] = ''; 
... 

什麼利於存放在數組中,而不是define()?我注意到Zend出現並不是使用define()(我可能是錯的,因爲我是Zend的新手)。 難道存儲somme 全球contants然後一般嗎?

在我有限的知識,我確實發現存儲一些全球contants有用的,例如,我可以存儲我的文檔根在這下面,然後我可以從任何地方訪問它 - 只要使用WEBSITE_DOCROOT

define ('WEBSITE_DOCROOT', str_replace('\\', '/', dirname(__FILE__)).'/'); 

不像這種方法低於我必須使用dirname(__FILE__)每次,

// Load config file 
$configFile = dirname(__FILE__) . '/../share/config/default.php'; 

,我可以只使用WEBSITE_DOCROOT . '/../share/config/default.php';調用文件。這不是更容易和一致嗎?

+2

'define'創建一個常量。常量不能改變它們的值。變量可以隨時更改其值。通過這個定義,常數的好處在於,你知道它一旦被設置就不會被搞砸 - 它總是最初的。有了變量,你可以隨時改變它們。但是,您不能像遍歷數組那樣迭代常量。當人們不笨並且知道他們在做什麼時,他們可以同時使用兩者。相互之間沒有什麼巨大的優勢,它歸結爲你認爲更容易和更清潔的工作。 – 2015-04-03 08:26:06

+1

我強烈建議您使用[dotenv](https://github.com/bkeepers/dotenv)這種方式來確保您的憑證得到了相當的保護。 – 2015-04-03 08:27:51

回答

2

使用define而不是array沒有限制。 對於數據庫連接功能,框架使用arrays,因爲他們想要有一些optional參數,如encoding。另一個原因是沒有必要define這些常量,併爲他們節省內存,而你只需要他們一次(在bootstrap.php)。 define的想法是在任何地方訪問const,但對於數據庫配置,您並不需要它。

*最好將數據庫配置存儲在read-onlynot executable權限爲apache的文件中,並拒絕其他用戶的所有訪問。所以這個文件不能是一個PHP文件。你可以使用xmlini或其他標準格式

+0

感謝您的答案。我可以問 - 我怎樣才能配置一個文件只讀,而不是可執行的權限的Apache和拒絕從其他用戶的所有訪問? – oasis 2015-04-03 13:34:29

+0

你應該將apache設置爲擁有者並將權限設置爲600.你可以用終端或你的cpanel來實現。 在終端運行這兩個命令 'chown apache:apache/path/to/the/config/file' 'chmod 400/path/to/the/config/file' 如果您沒有訪問終端,轉到cpanel->文件管理器,並更改目錄配置文件,並更改它的權限 – 2015-04-03 13:54:48

+0

得到它。謝謝!所以我不能這樣做的PHP文件? – oasis 2015-04-03 13:58:07

1
  • 在你的應用程序中使用常量對於存儲base-url之類的信息非常有用,我真的看不出有什麼理由不使用它們,那就是它們的目的。
  • 使用,而不是一個數組偏好和設計(架構)的問題,大多數的框架使用數組的原因是,它是簡單地使用陣列(顯然)
  • 這不是壞的,使用更方便存儲數據一個全局常量,如果你發現它對你有用,那麼通過一切手段來利用它,我可以想象到,你會明白爲什麼其他人更喜歡數組方法。

但爲了保證您的安全憑證,我建議使用dotenv 我認爲這是可能做到這一點的最好辦法。

祝你好運。

+0

感謝您的答案。我現在感覺更好地使用常量。肯定會考慮'dotenv'。謝謝。 – oasis 2015-04-03 08:46:51

+0

'dotenv'是用Ruby編寫的。我們如何在PHP中使用Ruby? – oasis 2015-04-03 08:51:24

+1

對不起,我的壞,這裏是PHP版本:[dotenv](https://github.com/vlucas/phpdotenv) – 2015-04-03 09:22:30

1

配置和參數必須設置你的PHP項目之外
你必須記住,這樣的工作可以由一個人,是不是開發者來管理,一無所知關於PHP編程
使用什麼標準爲此:像XML,屬性或conf文件

相關問題