这几天折腾wordpres的一些插件,其中在安装好几个插件的时候都提示出现致命错误,导致插件无法启动。
我安装启动DW Question Answer问答系统,或者AnsPress社群问答系统都出现错误信息,
提示信息为
无法启用插件,因为它引起了一个致命错误(fatal error)。 Parse error: syntax error, unexpected T_FUNCTION, expecting ')' in ...\wp-content\plugins\dw-question-answer\inc\autoload.php on line 4
查看这些出现致命问题的文件的源码
spl_autoload_register(
function ($className) {
$classPath = explode('_', $className);
if ( $classPath[0] != 'DWQA' ) {
return;
}
// Drop 'Google', and maximum class file path depth in this project is 3.
$classPathSlice = array_slice($classPath, 1, 2);
if ( count( $classPath ) > 3 ) {
for ($i=3; $i < count( $classPath ); $i++) {
$classPathSlice[1] .= '_' . $classPath[$i];
}
}
$filePath = DWQA_DIR . 'inc/' . implode('_', $classPathSlice) . '.php';
if ( ! file_exists( $filePath ) ) {
$filePath = DWQA_DIR . 'inc/' . implode('/', $classPathSlice) . '.php';
}
if (file_exists($filePath)) {
require_once($filePath);
}
}
);
可以看到这是一个自动加载注册函数,当PHP碰到没有定义的类就会激活这个自动加载注册函数。
从代码中可以看到这个代码的写法使用的是php5.3中才支持的匿名函数的写法,如果php环境是5.3以下的版本就会无法识别,出现致命错误!
如果是低于5.3版本的php系统,那么这个代码可以简单修改一下,我的办法如下
function loadprint($className) {
$classPath = explode('_', $className);
if ( $classPath[0] != 'DWQA' ) {
return;
}
// Drop 'Google', and maximum class file path depth in this project is 3.
$classPathSlice = array_slice($classPath, 1, 2);
if ( count( $classPath ) > 3 ) {
for ($i=3; $i < count( $classPath ); $i++) {
$classPathSlice[1] .= '_' . $classPath[$i];
}
}
$filePath = DWQA_DIR . 'inc/' . implode('_', $classPathSlice) . '.php';
if ( ! file_exists( $filePath ) ) {
$filePath = DWQA_DIR . 'inc/' . implode('/', $classPathSlice) . '.php';
}
if (file_exists($filePath)) {
require_once($filePath);
}
}
spl_autoload_register('loadprint');
转载请注明:百蔬君 » 【原创文章】一个在wordpress中安装DW Question Answer插件出现致命错误的解决办法

