我在StackOverflow上读过类似的主题,但不幸的是,没有人解决这个问题(或者可能我只是没有看对主题(。
我在视图home.php
:中有以下内容
<?php include_once(echo base_url() .'/template/layout/header.php'); ?>
现在我的结构是这样的:
/public_html
/template
/layout
/header.php
/footer.php
文件不包括在内,有人知道为什么吗?
注意:我已将$config['base_url']
设置为www.domain.com
根据文档base_url()
:
此函数返回与
site_url()
相同的内容,但没有index_page或url_suffix。
所以它应该返回http://www.domain.com/
,这在include_once()
中使用是错误的
您要使用的是CI常数APPPATH
:
<?php include_once(APPPATH . 'template/layout/header.php'); ?>
如前所述,您应该将视图放在视图文件夹中并加载它们,而不是将它们包括在内。这是正确的CI方法。
为什么不把视图放在/application/views/
下,然后像这样加载它们?
$this->load->file('application/views/layout');
$this->load->view('layout.php');
无论如何你必须做:
<?php include_once(base_url().'/template/layout/header.php'); ?>
而不是:
<?php include_once(echo base_url() .'/template/layout/header.php'); ?>
<?php include_once(echo base_url() .'/template/layout/header.php'); ?>
你做错了两件事。
- 代码内部不应包含echo。所以你的代码应该是
include_one(base_url((。'/template/layout/header.php'(;
- 您正在尝试使用url而不是绝对路径加载文件。不能使用base_url(返回网站urlhttp://www.domain.com/),如果php.ini allow_url_open设置为关闭
您可以使用str_replace(SYSDIR.'/','',BASEPATH(获取到基的绝对路径
因此,以下代码将起作用:
$abs_path = str_replace(SYSDIR.'/', '',BASEPATH);
include_once($abs_path .'/template/layout/header.php');
正如上面2篇文章所说,在CI中做到这一点的正确方法是将它放在视图文件夹中,并使用CI加载功能加载它。