你现在的位置:首页 > PHP网站建设知识库 > Drupal > 正文

drupal故障排除

1. 停下手头的工作, 思考

你刚才对站点做过任何更改吗? 例如安装或升级module.
你安装的module和你的Drupal版本匹配吗? 例如, Drupal 7的Views在Drupal 6上是不工作的.

2. 阅读错误信息.

这取决于你怎样设置错误信息的展示, Drupal式的详细错误信息可能会出现在页面上. 当core dblog module启用的时候, 你可以在/admin/reports/dblog中找到错误报告. 在调试模式下, 你也可以查找非Drupal日志, 例如Apache, PHP等等. 你的主机提供商可以帮助你找到这些日志.

错误可能包括:

.htaccess 配置错误 - "Internal server error" - 500 错误 这里不允许出现指令
内存问题 - Fatal error: Allowed memory size of 8388608 bytes exhausted
Javascript问题 - modules/troublesome/utility.js 404 没找到

3. 检查你的页面

不完整的HTML标记和结构问题可能让你的站点主题产生问题, 例如对齐问题, 错误的字体大小, 溢出的块等等. 在你调试你的站点的时候, 查看每条错误信息, 鉴定出错误出现在那里, 解决它是不是重要的. 你可能不会解决掉所有完整性问题, 但你应该找到他们为什么存在.

4. 检查你站点的CSS

站点的样式问题可能由CSS覆盖引起. 如果你对CSS还不熟悉, 那你的第一步应该是了解更多cascading. 一旦你熟悉了CSS, 寻找子元素和容器元素可能产生的问题. 特别的, 一个元素的外边距可能是另一个元素的内边距(尤其是在列表元素中). 另外, 当你需要为你的站点重写CSS的时候, 在你的主题中新建一个style.css文件, 不要改变core版本的文件.

你可以使用以下工具检查你的代码:

FireBug - 在Firefox中
Web Developer Toolbar - 在Firefox和Chrome中
DOM inspector - 在IE中

5. 清除Drupal的缓存

为了提高页面速度, Drupal为请求资源建立了缓存. 当Drupal响应你的一个页面请求时, 它可能包含了一个旧版本的页面, 没有你最近做的变更. 为了定位这样的问题, 你可以清除Drupal所有的缓存, 得到最新生成的页面.

Drupal 6: 点击"Clear all caches"按钮在/admin/settings/performance最下方.
Drupal 7: 点击"Clear all caches"按钮在admin/config/development/performance最上方.

6. 阅读你的Module的README

一个module的README.txt通常都包含了:

 大体信息和作者的建议
这个module依赖什么(例如主机PHP扩展)
要求
安装说明
注意事项(例如module冲突和补丁)


7. 搜索你得到的错误

由于Drupal现在的普及度, 很可能已经有人遇到过你所遇到的问题了. 使用Google搜索你得到的所悟信息. 在搜索的时候, 确认去掉错误信息中那些具体的本地或主机环境信息. 在搜索关键词前面加入"drupal", 可以帮助你得到更精确的结果. 例如, Google: "Argument #1 is not an array" drupal.

8. 深入代码确认SQL错误

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(n.nid), n.title FROM category c INNER JOIN category_node r ON c.cid = r.cid INN' at line 1 ... in /var/www/html/doadance/drupal/includes/database.mysql.inc on line 120.
这样的错误一般来说, 绝对不是Drupal引起的. 他们通常是一些贡献的module发送槽糕的指令给Drupal的结果. 调试的时候, 尝试找到错误信息中的数据库表, 使用这张表的module最可能是罪魁祸首. 在这个例子中, 就很像是category闯的祸. 然而, 也可能是另一个module尝试去直接访问目录数据.

9. 调试Module中的代码

找到问题根源的最好的办法通常是打印出所有涉及到的代码. 如果你还没有安装Devel module, 你最好马上安装一个. 下面是一个怎样一步一步找到和调试错误的例子:

warning: in_array() [function.in-array]: Wrong datatype for second argument in /home/httpd/global/drupal/modules/node.module on line 1303.
到node.module的1303行去. 你将要修改这个文件, 所以最好还是先备份, 或者确认你的文件版本是最新的.
在1303行, node.module找到in_array('status', $node_options).
在这行之前插入代码: print("Node options are : '" . print_r($node_options, 1) . "'");.
查看输出信息, 确认这个错误的数据类型是怎么来的.

10. 使用容易得到答案的方式提问

当你在Drupal论坛中提交问题时, 记住用聪明的方式提问. 当你的问题解决了的时候, 确认在这个线程里同步一下.

11. 找出带给你麻烦的那个Module

当你发现是某个module引起的问题的时候, 打开这个module的.module文件. module的客户化页面一般在hook_menu()中定义的. 大多数module在url中就可以辨认出来, 然后确定这个module是提供内容的, 最后寻找使用hook_menu()的代码和.module文件.