WordPress 和 APC 的小问题

昨天晚上给一位付费客户安装 APC PHP 加速器 的时候发现一个小问题,访问 WordPress 页面没问题也可以看到 WordPress 管理后台页面,但是无法登录,报错如下:

Fatal error: Call to undefined function wp_dashboard_setup() in /home/vpsee/wordpress/wp-admin/index.php on line 15

关闭 APC 后这个问题就消失了,只要一打开 APC 就报错,进一步调查把问题缩小到一个 APC 配置参数上 apc.include_once_override=1,如果设置成 apc.include_once_override=0 就没有问题。根据 APC 参考手册的说明,apc.include_once_override 参数是用来 Optimize include_once() and require_once() calls and avoid the expensive system calls used. 一般的建议是设置成0(关闭这个选项)。现在解决办法有两个,一个是设置 apc.include_once_override 为 0(这样会影响到所有网站,所有 PHP 站都不能用到 apc.include_once_override 这个优化了):

# vi /etc/php.d/apc.ini

...
apc.include_once_override = 0
...

另一个办法是修改 WordPress 文件(这样只会影响到一个 WordPress 网站),打开 wp-admin/index.php 文件找到 require_once(ABSPATH . ‘wp-admin/includes/dashboard.php’); 这行注释掉后修改成如下:

# vi /home/vpsee/wordpress/wp-admin/index.php

...
/* require_once(ABSPATH . 'wp-admin/includes/dashboard.php'); */
require_once('./includes/dashboard.php');
...

评论 (3 Comments)

  1. 最近安装了apc配合Litespeed..
    如果apc.shm_size分配230M内存以上的话,就会出现
    PHP Fatal error: PHP Startup: apc_mmap: mmap failed:
    错误…请问遇到过这样的问题吗

  2. 没用过 litespeed,不过这个问题和 web server 没有关系,是 pecl/pear 的问题。如果你用 pear install pecl/apc 安装 apc 应该没问题,如果是编译安装的话需要更改 PEAR 的内存限制。

  3. 记得APC的include_once_override优化要起作用的话,路径必须是绝对路径

发表评论