ThinkPHP5.1根目录下的命令行入口文件think删除导致无法访问

作者: Richex 分类: PHP 发布时间: 2018-11-02 17:16

在ThinkPHP5.1下,如果应用部署在根目录而非public目录下,根目录的think文件是不能删除的,删除后将会导致程序无法正常运行。

部署网站时候出现这个问题后各种地方找了个遍都没有找到原因,花了很久一个个问题仔细排除查看,最后发现是根目录的think文件问题,这个命令行入口文件不能删除。

已经过了有一段时间了,不过觉得还是有必要记录下来,希望后面的人部署网站时碰到这个问题省的再跳一次坑,百度搜索了一下,在官方论坛也有对应的帖子,参考最下方的原文地址。

原因在于核心代码thinkphp\library\think\Loader.php:68会判断think文件是否存在,如果不存在,则通过dirname()将目录减少一级,所以,如果index入口文件如果是在public目录下,这样是没有问题的,如果index入口文件是放在项目根目录下,这时候就会有问题了,为了不修改核心代码,可以在根目录下放一个空的think文件即可。

框架内对应代码如下:

// 获取应用根目录
public static function getRootPath()
{
    if ('cli' == PHP_SAPI) {
        $scriptName = realpath($_SERVER['argv'][0]);
    } else {
        $scriptName = $_SERVER['SCRIPT_FILENAME'];
    }

    $path = realpath(dirname($scriptName));

    if (!is_file($path . DIRECTORY_SEPARATOR . 'think')) {
        $path = dirname($path);
    }

    return $path . DIRECTORY_SEPARATOR;
}

原文地址


     

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续分享和创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注