0

我经营一个大型 PHP 网站,其中一些页面连接到 MySQL 数据库,效果很好。我现在已经创建了一个本地测试服务器,并将我的 PHP 页面和我的数据库下载到 wamp 服务器,这些页面不需要数据库连接就可以正常工作。但是,在使用数据库的页面上,mysql_connect()请求会引发错误:

警告:mysql_connect():连接尝试失败,因为连接方在一段时间后没有正确响应,或者连接失败,因为连接的主机没有响应。

我可以通过将 PHP 页面上的 MySQL 请求更改为:

$server="localhost";
$user="root";
$password="";

离开$database="xxxx";(原名)

这个解决方案意味着我必须使用 MySQL 请求更改每个页面,然后在开发完成后将它们改回来。

有没有办法让原始 MySQL 连接请求工作,同时将原始安全数据保留在 PHP 页面上?例如,通过更改 wamp 服务器的 config.inc.php 文件?

我在 config.inc.php 文件中尝试了多种组合,但似乎都不起作用。

4

3 回答 3

2

正如我在评论中所说,如果您在每个文件中都硬编码了 mysql 连接凭据,那么您只有两种选择:

  1. 替换每个文件中的凭据(进行大量搜索和替换)
  2. 将相同的凭据放在本地服务器中。如果代码尝试连接到远程主机,您可以将该主机放在指向本地主机的主机文件中。这样您就可以模拟远程环境。
于 2013-04-01T14:44:32.667 回答
1

一个好的解决方案是将这些信息保存在一个文件中,该文件包含在需要 mysql 连接的所有其他页面中。

数据库.php

$server="localhost";
$user="root";
$password="";
$database = "nameofyourdb"

// Might event do the mysql_connect here

index.php 或任何其他页面

include_once('database.php');
// your code
// containing mysql_query() and so on

然后,当您从本地转到生产时,您只需要更改一个文件中的信息。

甚至可以使用这样的技巧来避免更改:

if ($_SERVER['SERVER_ADDR'] == '127.0.0.1') {
    // local
    $server="localhost";
    $user="root";
    $password="";
    $database = "nameofyourdb";
}
else {
    // production
    $server="localhost";
    $user="...";
    $password="...";
    $database = "...";
}

小心使用已弃用的 mysql API。例如,您应该转移到 PDO。

于 2013-04-01T14:46:23.623 回答
0

正如之前的答案所述,您应该简单地将连接参数移动到非人类可读的文件中(即,如果可能,在您的网络服务器根目录之外)。通过这种方式,您可以安全地存储它们,而不会有外部访问的风险。

然后,将您的文件包含在需要它的每个页面中。例子:

配置.inc.php:

<?php
$db['host'] = '127.0.0.1';
$db['user'] = 'user';
$db['pw'] = 'passwd';
$db['name'] = 'dbname';

你甚至可以在这个文件中获得创意:

<?php
// Production settings
$db['host'] = '127.0.0.1';
$db['user'] = 'user';
$db['pw'] = 'passwd';
$db['name'] = 'dbname';

// Test/Sandbox settings
/* 
$db['host'] = '127.0.0.1';
$db['user'] = 'user';
$db['pw'] = 'passwd';
$db['name'] = 'dbname2';
*/

然后只需在每次切换环境时切换评论。

然后,只需将此文件包含到您需要连接到数据库的页面中:

索引.php:

<html><head><tltle>My page</title>
...HTML Code here...
<?php include_once("/path/to/config.inc.php"); // Again, store this file outside the web directory, if possible ?>
<?php mysqli_connect($db['host'],$db['user'],$db['pw'],$db['name']); ?>
于 2013-04-01T15:00:15.823 回答