PHP和绝对路径,但它在一秒钟前工作

时间:2013-01-15 23:24:22

标签: php absolute-path

我没有看到错误..

我在web根目录下有一个索引文件。索引文件设置一个包含基本路径的数组,如下所示:

$medium    = 'web';
$framework = '_magma';
$js_lib    = '_lava';
$path_info = pathinfo($_SERVER['SCRIPT_NAME']);
$base_path = $path_info['dirname'];
print_r($base_path);

$paths = ['root'      => $base_path,
          'framework' => $framework,
          'js_lib'    => $js_lib,
          'medium'    => '/' . $medium,
          'uri'       => $_SERVER['REQUEST_URI']];

try {
    if (!include($paths['root'] . $paths['framework'] . '/core/AutoLoader.php')) {
        throw new Exception ('<b>Error - AutoLoader is missing</b>');
    }
    $loader   = new AutoLoader($paths);
    $appStack = new BootStrap($paths);
    $app      = new StartPage($paths, $appStack->getConfig());
    $app->start();
} catch (Exception $e) {
    echo
        '<p><b>EXCEPTION</b><br />Message: '
        . $e->getMessage()
        . '<br />File: '
        . $e->getFile()
        . '<br />Line: '
        . $e->getLine()
        . '</p>';
}

index然后在'/ framework / core'下实例化BootStrap,并通过构造函数传递上面的数组,该构造函数在类本身中设置它。

BootStrap然后在'/ framework / web'下实例化StartPage,并再次通过构造函数传递paths数组。

然后,StartPage使用paths变量实例化一个设置样式表的类,位于“/ web / stylesheets”下,如下所示:

class CssInclusion {

    private $paths;
    private $include_css;

    public function __construct($paths, $include_css) {

        // set variables
        $this->paths = $paths;
        $this->include_css = $include_css;
    }

    public function loadStylesheets() {

        // set path
        $directory_path = $this->paths['root'] . $this->paths['medium']. '/stylesheets';

        // loop through stylesheet array
        foreach ($this->include_css as $stylesheet) {

            // include stylesheet, handle exceptions
            $file_path = $directory_path . '/' .  $stylesheet . '.css';
            print_r($file_path);
            try {
                if (!is_file($file_path)) {
                    throw new Exception ('<b>Error - missing stylesheet:</b> ' . $file_path . '<br />');
                }
                echo '<link rel="stylesheet" type="text/css" href="' . $file_path . '" />';
            } catch (Exception $e) {
                echo
                    '<p><b>EXCEPTION</b><br />Message: '
                    . $e->getMessage()
                    . '<br />File: '
                    . $e->getFile()
                    . '<br />Line: '
                    . $e->getLine()
                    . '</p>';
            }
        }
    }
}

我没有例外,但样式表没有加载。这很奇怪。你的新眼睛可以看到我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

您的根路径是绝对系统路径,如srv/www。 但样式表路径必须是浏览器可以访问的相对路径或绝对路径。

http://yoursite/css/css

我得到了我的basePath:

$pathInfo = pathinfo($_SERVER['SCRIPT_NAME']);
$basePath = $pathInfo['dirname'];

也许您只需更改该行:

$directory_path = $this->paths['medium']. '/stylesheets';

我不知道$this->paths['medium']包含哪些内容?!