根据服务器类型自动定义mysqli的用户名和密码.好主意


Automatically define username and password for mysqli depending on server type. Good idea?

我已经创建了一个页面,用于包含我的所有连接,该页面将自动设置我的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
}