我已经创建了一个页面,用于包含我的所有连接,该页面将自动设置我的sql用户名和密码,以及错误报告设置,具体取决于连接是与测试服务器还是实时站点进行的。想知道这是不是个好主意?为什么?我只是懒惰还是有更好的方法?
<?php
# This will set username and password for database access, as well as error reporting according to the server being used.
# It eliminates the need to change code when switching from testing environment to live site.
# Let's find out which server is being used and take the first 3 characters of the server name.
$thisServer = substr($_SERVER['SERVER_NAME'], 0, 3);
# If on localhost (testing server):
if($thisServer == 'loc'){
# enable php error reporting
error_reporting(-1);
# enable mysqli reporting
$driver = new mysqli_driver();
$driver->report_mode = MYSQLI_REPORT_ALL;
# set username and password
$dbHost = '127.0.0.1';
$dbUserName = 'myUser';
$dbPassword = 'myPassword';
# If on remote server:
} elseif($thisServer == 'www') { # <-- This should be first 3 characters you see in URL of live site.
# disable php error reporting
error_reporting(0);
# disable mysqli reporting
$driver = new mysqli_driver();
$driver->report_mode = MYSQLI_REPORT_OFF;
# set username and password
$dbHost = 'mysite.com';
$dbUserName = 'myUser';
$dbPassword = 'myPassword';
};
?>
我假设您使用的是Apache,我希望Nginx可以处理类似的功能。您的web服务器上可能有用于生产和开发环境的不同虚拟主机。您可以让web服务器为您设置所需的变量:
<VirtualHost *:80>
ServerName mysite.com
ServerAlias www.mysite.com
SetEnv DB_HOST "localhost"
SetEnv DB_USER "myUser"
SetEnv DB_PASS "myPassword"
SetEnv DB_REPORT "0"
SetEnv ERR_REPORTING "0"
....
</VirtualHost>
<VirtualHost *:80>
ServerName localhost
SetEnv DB_HOST "localhost"
SetEnv DB_USER "testUser"
SetEnv DB_PASS "testPassword"
SetEnv DB_REPORT "255"
SetEnv ERR_REPORTING "-1"
....
</VirtualHost>
然后,您可以在PHP代码中检索它们。两台服务器的代码都相同,漂亮整洁。
$dbHost = getenv("DB_HOST");
$dbUserName = getenv("DB_USER");
$dbPassword = getenv("DB_PASS");
$dbReporting = (int)getenv("DB_REPORT");
$errLevel = (int)getenv("ERR_REPORTING");
$driver = new mysqli_driver();
$driver->report_mode = $dbReporting;
error_reporting($errLevel);
这种方法的另一个优点是将数据库凭据与不需要它们的人隔离开来。
如果您要在本地网络上工作,也许您可以使用localhost或网络ip。
if($_SERVER['REMOTE_ADDR'] == "127.0.0.1" || $_SERVER['REMOTE_ADDR'] == "192.168.1.1") {
//your local codes
}