PHP require_once失败了吗?

时间:2014-07-04 13:52:57

标签: php

所以,我试图用PHP构建模板加载器系统。这是我到目前为止所得到的:

的config.php:

<?php
    $style_assets_path = "/includes/styles/";

    if ($_GET['page_id'] !== '1'){
        header('Location: /template.php?pageid=1');
        exit(0);
    }

    if ($_GET['page_id'] <= 100) {
        $template = "/main/main.php";
    }

    function loadTemplate() {
        require_once dirname(__FILE__) . "$style_assets_path" . "templates" . "$template";
        // This should output: /includes/styles/templates/main/main.php
    }
?>

home.php:

<?php
    require_once dirname(__FILE__) . "/config.php";
    loadTemplate($template);
?>

当我打开home.php时,我收到以下错误:

Warning: require_once(/home/xxxxxxx/public_htmltemplates/) [function.require-once]: failed to open stream: No such file or directory...

我做错了什么?

2 个答案:

答案 0 :(得分:1)

函数与全局变量的范围不同,除非您将它们作为参数传递或使用global关键字(仅为完整性而提及),否则您无法访问它们。

如果你的价值观没有改变,虽然把它们宣称为常数,那就更漂亮了:

declare('STYLE_ASSETS_PATH', "/includes/styles/");

if ($_GET['page_id'] !== '1'){
    header('Location: /template.php?pageid=1');
    exit(0);
}

if ($_GET['page_id'] <= 100) {
    $template = "/main/main.php";
}

loadTemplate($template);

function loadTemplate($template) {
    require_once dirname(__FILE__) . STYLE_ASSETS_PATH . "templates" . "$template";
}

答案 1 :(得分:0)

这里正确的回答!!!!! 仔细查看您的错误消息! 这是因为, $ style_assets_path 未在功能中确定。 你应该在函数中创建全局变量:

 function loadTemplate() {
        global $style_assets_path;
        global $template;
        require_once dirname(__FILE__) . "$style_assets_path" . "templates" . "$template";
        // This should output: /includes/styles/templates/main/main.php
    }