Graent.Hu 的博客

新浪微薄腾讯微薄

最新碎语:最近感觉有些迷茫,怎么办~

您的位置:Graent.Hu 的博客 >PHP编程> thinkPHP5版本自动加载扩展配置(application/extra)无法实现的解决办法

thinkPHP5版本自动加载扩展配置(application/extra)无法实现的解决办法

    据官方手册说明,从5.0.1开始就已经废弃了extra_config_list参数,后面的扩展配置只需要放置在application/extra目录之后就可以自动的加载,但是发现怎么写都没法加载正常,所以就检查了一下原因,发现在thinkphp/library/think/App.php中大约第495行左右:


            // 读取扩展配置文件
            if (is_dir(CONF_PATH . $module . 'extra')) {
                $dir   = CONF_PATH . $module . 'extra';
                $files = scandir($dir);
                foreach ($files as $file) {
                    if (pathinfo($file, PATHINFO_EXTENSION) === CONF_EXT) {  //此行是495行
                        $filename = $dir . DS . $file;
                        Config::load($filename, pathinfo($file, PATHINFO_FILENAME));
                    }
                }
            }
可以看到上面的pathinfo(),根据pathinfo函数的说明此情况返回的是文件名的后缀也就是例如配置文件为test.php那么则返回php,但是查看后面的常量CONF_EXT是使用的EXT的值,而其值是“.php”,看到这里就明白了,“php”是怎么也不可能等于“.php”的,问题不大,也不是什么很危险的问题,只是折腾了一点时间,其实很简单只需要把第495行改成如下:



if (strpos($file, CONF_EXT)) {
或者改成



if ('.' . pathinfo($file, PATHINFO_EXTENSION) === CONF_EXT) {
找到问题之后,去官方git仓库看了一下发现,官方是在5天前提交了一个更改,不是别的就是这个问题,而我下的版本是在5天之前下载的,官方使用的办法是第二种,两种或者更多的办法都可以实现,希望对一些朋友有些帮助:


QQ截图20170617225124.png

我的微信:graent_hu

欢迎扫码加我和微信好友,有什么问题我们可以一起探讨,有什么需要也随时欢迎发消息给我~

转载请注明出处:

本文标题:thinkPHP5版本自动加载扩展配置(application/extra)无法实现的解决办法

本文链接:https://www.wlyc.cn/post-88.html

发表评论

路人甲 表情
看不清楚?点图切换

网友评论(2)

我的最新下载的是5.0.2版本,// 读取扩展配置文件的相关代码已经是 if ('.' . pathinfo($file, PATHINFO_EXTENSION) === CONF_EXT) {  但是依然不生效,后来发现是Config::load($filename, pathinfo($file, PATHINFO_FILENAME))这行代码有问题,改成Config::load($filename)然后就生效了
lee888 1个月前 (10-31) 回复
@lee888:亲,现在下载的可能和那时候有不同了,文字我是去年6月份写的,可能有些旧了,根据新的处理吧,可以解决问题就是可以的
Graent Hu 1个月前 (11-01) 回复