Typecho中改var文件夹路径后,插件无法使用的解决办法


今天在使用70 的 google_code_svn 插件时,发现一个问题:

明明我的vps已经开启了 curl,但是始终提示

对不起, 您的主机不支持 php-curl 扩展而且没有打开 allow_url_fopen 功能, 无法正常使用此功能

本地测试好着,放服务器上就出问题了。

开始一直以为是服务器问题,最后经过调试,确定了问题的根源!

var 文件夹位置的问题

typecho 默认的文件夹结构如下:如 /home/web/typecho

如果一个vps上放多个typecho的话,完全可以共用var目录,这样,我把var目录放到typecho目录的同一级,即: /home/web/var 

修改 config.inc.php 里面的var的路径为 :

@set_include_path(get_include_path() . PATH_SEPARATOR .

dirname(__TYPECHO_ROOT_DIR__) . DIRECTORY_SEPARATOR . 'var' . PATH_SEPARATOR .

__TYPECHO_ROOT_DIR__ . __TYPECHO_PLUGIN_DIR__);

让typecho1、typecho2、typecho共用var文件夹。

使用其它功能都没有任何问题,但是使用 GoogleCodeSVN 时出问题了。

var/Typecho/Common.php 类中,有一个 isAvailableClass方法。

大约466行:

$dirs = array_map('realpath', array_filter(explode(PATH_SEPARATOR, get_include_path()),

array('Typecho_Common', '__safePath')));

这句调用了 Typecho_Commmon::__safePath 这个方法,来检测类是不是能被加载。

__safePath如下:

也就是这个方法,设定了所有的类文件必须在 __TYPECHO_ROOT_DIR__ 目录下,才可以加载。

而var文件夹已经明显没有在typecho目录下,因而返回false。 

解决方案:

如果像我一样,改了var目录的话,将 var/Typecho/Common.php 中 112行(大概),__safePath 方法中的  $safePath  变量,改为 confing.inc.php 中 var 的上一级目录即可。

如我的 config.inc.php 中 var 的上一级目录:

@set_include_path(get_include_path() . PATH_SEPARATOR .

dirname(__TYPECHO_ROOT_DIR__) . DIRECTORY_SEPARATOR . 'var' . PATH_SEPARATOR .

__TYPECHO_ROOT_DIR__ . __TYPECHO_PLUGIN_DIR__);

即 dirname(__TYPECHO_ROOT_DIR__)

将 var/Typecho/Common.php 中的

$safePath = rtrim(__TYPECHO_ROOT_DIR__, '/');

改为:

$safePath = rtrim(dirname(__TYPECHO_ROOT_DIR__), '/');

即可。

添加新评论