require_once未能包含模板文件。为什么?

时间:2014-05-13 14:26:09

标签: php

以下代码显示以下错误:

Warning: require_once(/home/..../public_html/edu) [function.require-once]: failed to open stream: Success in /home/..../public_html/edu/index.php on line 25

Fatal error: require_once() [function.require]: Failed opening required '' (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/..../public_html/edu/index.php on line 25

我该如何解决这个问题?

<?php
    class Model
    {
        public $tstring;
    public function __construct(){
        $this->tstring = "The string has been loaded through the template.";
        $this->template = "tpl/template.php";
    }
}

class View
{
    private $model;

    public function __construct($model) {
        $this->controller = $controller;
        $this->model = $model;
    }

    public function output(){
        $data = "<p>" . $this->model->tstring ."</p>";
        require_once($this->model->template);   //line 25 Attention!!!!!!!!
    }
}


class Controller
{
    private $model;

    public function __construct($model){
        $this->model = $model;
    }

    public function clicked() {
        $this->model->string = "Updated Data, thanks to MVC and PHP!";
    }
}



$model = new Model();
$controller = new Controller($model);
$view = new View($controller, $model);


echo $view->output();

1 个答案:

答案 0 :(得分:0)

当您使用相对或绝对/相对路径时,我发现事情大大简化了 - 因此您可以通过需要它的文件而不是根目录来访问您需要的文件。

例如,假设你有这样的设置:

--/ | | --var | |--www | |--html | |--index.php | |--includes | |--util.php

客户端运行index.php文件。假设index.php需要包含util.php有三种方法可以做到这一点(index.php中将存在以下行)

绝对:

require_once('/var/www/html/includes/util.php');

相对

require_once('./includes/util.php');

绝对/相对:

require_once(dirname(__FILE__).'/includes/util.php');

如您所见,绝对方法从/目录开始寻址util.php文件。相对方法通过从index.php开始并提供从index.php获取到util.php的路径来解决util.php。绝对/相对方法实际上已解析为绝对方法,因为字符串dirname(__FILE__).'/includes/util.php'实际上将解析为“/var/www/html/includes/util.php”,但功能仍然显示为相对,因为您只需要想想从index.php到util.php的路径。

我倾向于选择绝对/相对方法。 而不是$this->template = "tpl/template.php"你可能想尝试

$this->template = dirname(__FILE__).'/tpl/template.php';

即使此时仍有问题,您也可以echo $this->template变量,以便准确查看要处理的文件。

dirname(__FILE__)部分感到困惑?这是一些链接。

目录名

http://ca1.php.net/dirname

__ FILE __

http://us2.php.net/manual/en/language.constants.predefined.php

希望这会有所帮助并祝你好运!