我运营一个大型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文件中尝试了很多组合,但似乎都没有。
答案 0 :(得分:2)
正如我在评论中所说,如果你在每个文件中都有硬编码的mysql连接凭证,那么你只有两种选择:
答案 1 :(得分:1)
一个好的解决方案是将这些信息保存在您包含在需要mysql连接的所有其他页面中的文件中。
database.php中
$server="localhost";
$user="root";
$password="";
$database = "nameofyourdb"
// Might event do the mysql_connect here
index.php ou任何其他页面
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。
答案 2 :(得分:0)
如前所述,您只需将连接参数移动到非人类可读文件中(如果可能,请在您的网络服务器根目录之外)。通过这种方式,您可以安全地存储它们,而不会冒外线访问的风险。
然后,将您的文件包含在需要它的每个页面中。例子:
的config.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';
*/
然后只需在每次切换环境时切换注释。
然后,只需将此文件包含在需要连接数据库的页面中:
的index.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']); ?>