drupal 7 安装失败后的补救办法
在安装 drupal 7 时安装,导入数据库已经成功,但是在安装语言包的时候卡住了,没有进行最后三步,管理员帐号没能启用。此时我退出安装,访问网站,没有问题。但是管理员admin的密码没有设置,以至于不能登陆。
-
设置admin的密码
我是网站的拥有着,有权限直接修改数据库。所以,可以通过phpmyadmin更改users表,直接填入密码字段。
但是密码字段储存的是加密后的字符串。我们可以用加密函数加密密码,将加密后得到的字符串填入。
那么,drupal使用的是那种加密方式呢?
查资料得知,drupal5和6使用MD5加密,而7使用hash加密。
不要烦恼这些。drupal7提供了user_hash_password函数用来加密密码。
那么要如何操作呢?
在drupal7的跟目录下找到index.php文件,在drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL)的下面插入三行代码:
require_once 'includes/password.inc';
echo user_hash_password('1234');
die();
有经验的读者立即就能明白它们做了什么。
访问站点,会访问index.php文件,user_hash_password会加密密码,echo将它输出,require_once用来导入user_hash_password函数,而die用来退出。
而drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL)前面有这么几句:
define('DRUPAL_ROOT', getcwd());
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
能猜出它大概是用来载入启动所需的php文件的。
之所以要放在它们后面,是因为password.inc会使用其中的一些函数。如果不这么做,会得到这么一行错误信息:
Fatal error: Call to undefined function variable_get() in /var/www/html/includes/password.inc on line 214
这就明显了,是password.inc需要一个variable_get函数,可能就是bootstrap.inc提供的。
不妨打开includes/bootstrap.inc文件,搜索一下variable_get,确实能看到这个函数的定义。
好,到此位置,我们得到了密码密文,复制。这时那三行代码就没用了,删除它们。
用phpmyadmin打开mysql数据库,找到drupal数据库,找到users表,admin记录,将密文复制入密码字段,保存。 -
激活用户
再次访问,就能登陆了。但是又有错误,显示:
用户尚未激活或被屏蔽
这是用户尚未激活。找到users表的status字段。它给出的说明是:Whether the user is active(1) or blocked(0)。
只要将admin记录的status值从0改为1即可激活。 -
角色
再次登陆,行了。但是只能看到一般页面,看不到管理员特有的编辑网站功能的选项。这是因为没有赋予admin以管理员权限。
drupal7设置了多种用户角色,给每个角色分配了不同的权限。它记录在role表中。可以看到有三个角色,id分别是1,2,3。管理员角色为3。
那么在那里记录了用户的角色呢?
在users_roles表里。新增条目,为admin设定一个角色。使用users表中的id表示user id,用role表中的id表示角色。
完成之后在看就好了。
=====
如此这般,还是不好用,居然不能安装主题和模块,搞不清咋回事,索性推倒重来吧。
- 清理数据库
删除数据库drupal里面的所有表格。至于数据库drupal和数据库用户drupaluser则保留。 - 删除文件
删除drupal根目录所有文件 - 从头安装一遍。
这要容易多了。所有的环境配置都在上次做过了,本次需要做的事大大减少。
但是上次就是安装语言包出的错,这次可要长记性,别再安装语言包了。可是要用怎么办?drupal安装好以后可以再安装语言包的。