作者:AAAAaaaa叶子 | 来源:互联网 | 2014-05-27 15:53
公司使用的是聚石塔服务器前天搭建论坛时,安装过程正常完成但是无法使用,在公司自有的linux服务器下,安装之后就没有任何问题于是开始通过读discuz源码,来查找问题所在很快发现,数据看连接的地方有些异常,连接之后,无法正常执行sql在/source/clas
公司使用的是聚石塔服务器
前天搭建论坛时,安装过程正常完成
但是无法使用,在公司自有的linux服务器下,安装之后就没有任何问题
于是开始通过读discuz源码,来查找问题所在
很快发现,数据看连接的地方有些异常,连接之后,无法正常执行sql
在/source/class/db下面的db_driver_mysql.php文件 81-85行为如下代码
if($pconnect) {
$link = @mysql_pconnect($dbhost, $dbuser, $dbpw, MYSQL_CLIENT_COMPRESS);
} else {
$link = @mysql_connect($dbhost, $dbuser, $dbpw, 1, MYSQL_CLIENT_COMPRESS);
}
mysql_connect()函数使用了第四个和第五个参数
直接删掉这两个参数之后,访问网址,不会出现一直加载的情况了
但是样式和JS都没有加载到
再次源码调试
/source/class/discuz中discuz_application.php文件中,第66行加载$this->_init_setting()之后
很多默认的参数都没有加载成功
这个方法调用的是/source/class/table中的table_common_setting.php文件中的fetch_all方法
于是查看数据表common_setting,里面的配置比正确安装之后的少了很多
联想到前面mysql的问题,应该是在执行安装时,这些配置数据没有写入数据库
所以在执行安装之前,就去掉mysql_connect的那两个参数
重新安装discuz,问题得到解决。
后续查阅了相关资料:mysql_connect()
还是没有搞清楚,这两个参数是怎么使得在那台服务器上连接出问题的。
可能是那台服务器上mysql的ini配置有些不同吧
resource mysql_connect ([ string $server [, string $username [, string $password [, bool $new_link [, int $client_flags ]]]]]
)
-
new_link
-
如果用同样的参数第二次调用 mysql_connect(),将不会建立新连接,而将返回已经打开的连接标识。参数 new_link 改变此行为并使 mysql_connect() 总是打开新的连接,甚至当 mysql_connect() 曾在前面被用同样的参数调用过。
-
client_flags
-
client_flags 参数可以是以下常量的组合:MYSQL_CLIENT_SSL,MYSQL_CLIENT_COMPRESS,MYSQL_CLIENT_IGNORE_SPACE 或 MYSQL_CLIENT_INTERACTIVE。进一步信息见MySQL
客户端常量。