1、问题描述
之前博客程序是放在阿里云虚拟主机上面,后来买了ESC,就自己搭建了环境使用的是PHP7.1.
但是在迁移之后,提示
Database Server Error
2、解决问题经过
查看源代码,在 /config.inc.php 实例化了Typecho_DB
/** 定义数据库参数 */
$db = new Typecho_Db('Mysql', 'typecho_');
$db->addServer(array (
'host' => '127.0.0.1',
'user' => 'user',
'password' => 'password',
'charset' => 'utf8',
'port' => '3306',
'database' => 'typecho',
), Typecho_Db::READ | Typecho_Db::WRITE);
Typecho_Db::set($db);
Typecho_DB类对应的文件为/var/Typecho/Db.php,
public function __construct($adapterName, $prefix = 'typecho_')
{
/** 获取适配器名称 */
$this->_adapterName = $adapterName;
/** 数据库适配器 */
$adapterName = 'Typecho_Db_Adapter_' . $adapterName;
if (!call_user_func(array($adapterName, 'isAvailable'))) {
throw new Typecho_Db_Exception("Adapter {$adapterName} is not available");
}
$this->_prefix = $prefix;
/** 初始化内部变量 */
$this->_pool = array();
$this->_connectedPool = array();
$this->_config = array();
//实例化适配器对象
$this->_adapter = new $adapterName();
}
可以看到,Typecho_DB类两个参数,第一个是适配器类名,第二个是数据库表前缀。
最后拼接生成的默认的适配器名称为 Typecho_DB_Adapter_Mysql,其对应的文件为/var/Typecho/Db/Adapter/Mysql.php。
3、原因
现在我们可以知道,Tyepcho使用的是Mysql扩展,但是在PHP7以后的版本,已经去除了Mysql扩展,因此我们可以选择使用PDO或者Mysqli.
4、解决办法
因此,我们只需要把 /config.inc.php里面,实例化Typecho_DB的第一个参数改为PDO_Mysql就可以了。
请问一下config.inc.php文件在哪个位置呢?
config.inc.php,这个文件就是在项目的根目录下啊