open_basedir 关于 Fat-free 框架的问题

open_basedir issue on Fat-free framework

我有以下问题 open_basedir 限制。

is_file(): open_basedir restriction in effect. File(/home/dev/bongos.com/vendor/bcosca/fatfree/lib/action/authaction.php) is not within the allowed path(s): (/home/Dev/bongos.com/:/tmp/)

路径大小写不同的原因是 f3 方法。

protected function autoload($class) {
    $class=$this->fixslashes(ltrim($class,'\'));
    $func=NULL;
    if (is_array($path=$this->hive['AUTOLOAD']) &&
        isset($path[1]) && is_callable($path[1]))
        list($path,$func)=$path;
    foreach ($this->split($this->hive['PLUGINS'].';'.$path) as $auto)
        if ($func && is_file($file=$func($auto.$class).'.php') ||
            is_file($file=$auto.$class.'.php') ||
            is_file($file=$auto.strtolower($class).'.php') ||
            is_file($file=strtolower($auto.$class).'.php'))
            return require($file);
}

在倒数第二行,它将路径转换为小写以检查它是否存在。如果是这样,它将失败并出现上述错误。

我无法禁用 open_basedir 或操纵任何标准的 f3 代码。

编辑

我的自动加载看起来像这样。

AUTOLOAD= Apps/

当您调用 Action\AuthAction class 时,框架自动加载器正在尝试查找以下 3 个文件:

  1. Action/AuthAction.php 里面 PLUGINS: /home/Dev/bongos.com/vendor/bcosca/fatfree/lib/Action/AuthAction.php
  2. action/authaction.php 里面 PLUGINS: /home/Dev/bongos.com/vendor/bcosca/fatfree/lib/action/authaction.php
  3. action/authaction.php 内部小写 PLUGINS/home/dev/bongos.com/vendor/bcosca/fatfree/lib/action/authaction.php

第三次尝试抛出 open_basedir 错误。但这只是自动加载器找不到正确文件路径的副作用。如果没有 open_basedir 指令,您将遇到 class not found 错误。

如果您确定 class 文件名的大小写正确(Action/AuthAction.phpaction/authaction.php),自动加载器应该可以找到该文件。

但是如果你想确保 open_basedir 在任何情况下都不会与自动加载器混淆,只需将 PLUGINS 设置为 ./,这是指向的相对路径默认 /home/Dev/bongos.com/vendor/bcosca/fatfree/lib/(前提是您的应用程序不 change directory)。