CodeIgniter视图无法解析PHP代码

3
我已经安装并正确运行了CodeIgniter。我的应用程序正在加载控制器并显示视图。
然而,如果像以前一样使用短标签<?=base_url()?>,这个版本不会将它们解析为PHP。
我是否应该包含完整标签<?php echo base_url(); ?>?当使用短标签时,执行立即停止在第一个PHP标签处。
PHP必须在某个时刻被解析,因为当使用短标签时,控制器仍然可以正确加载但产生未解析短标签的HTML。可能出现了什么问题?
    <div id="container">
    <div id="content">
        <img src="<?=base_url() . 'assets/images/cool_critter_logo_trans.png'?>" 
            alt="Cool Critters Logo" id="logo_image" />
        <h1>Welcome to Cool Critters!</h1>

        <p>
            This website is undergoing some serious updates! Please be patient as we work behind the scenes
            to improve the functionality and look of the website!
        </p>

        <p>
            Cool Critters is your source for dog training and agility supplies, courses, and information.
        </p>

        <p class="footer">Page rendered in <strong>{elapsed_time}</strong> seconds</p>
    </div>
    </div>

这在之前的另一台服务器上能够正常运行,但我在转移时弄坏了某些东西。

可在此处找到:http://107.21.96.179:81/


1
你能发布一下渲染视图的代码吗?我认为那可能是问题所在。 - aknosis
1
你有加载 URL 帮助器吗? $this->load->helper('url'); - gen_Eric
1
@ToothlessRebel -- 这绝对听起来像是你遇到了一些 PHP 错误(尽管可能没有立即看到),所以你应该查看你的 /applications/logs/ 目录(如果在配置文件中启用了日志记录)或者你的 PHP 错误日志。 - stealthyninja
6个回答

4
我的猜测是你的服务器不支持短标签。你可以修改配置文件,让CI动态重写短标签。
请查看372行开始的部分:https://github.com/EllisLab/CodeIgniter/blob/develop/application/config/config.php
/*
|--------------------------------------------------------------------------
| Rewrite PHP Short Tags
|--------------------------------------------------------------------------
|
| If your PHP installation does not have short tag support enabled CI
| can rewrite the tags on-the-fly, enabling you to utilize that syntax
| in your view files.  Options are TRUE or FALSE (boolean)
|
*/
$config['rewrite_short_tags'] = FALSE;

以下是相关的 IT 技术内容:

文档地址:http://codeigniter.com/user_guide/general/alternative_php.html

HTML 代码保持不变,只需要翻译上述内容即可。


更改这个并没有解决它。 - Marshall Davis
你能检查一下php.ini文件并告诉我们short_open_tag的值是多少吗? - swatkins
你重启了Web服务器吗? - swatkins
是的,我已经重新启动了服务器。 - Marshall Davis
你的页面甚至没有到达编写<div id="container">的地步。当我打开这个网站时,我得到了这个HTML返回值,这告诉我你的头部视图中有些东西正在破坏它。你是否开启了error_reporting?如果是,你有收到任何错误信息吗? - swatkins

3

正如Roel所说,如果不加载helper,base_url()函数将无法工作。

在控制器的构造函数中添加helper加载程序。

 $this->load->helper('url');

可能不是这样,但实际的PHP代码没有被解析。它在HTML输出中,所以我没有因缺少帮助程序而得到错误或错误的结果。 - Marshall Davis
您的头文件出现了错误(可能是语法错误)...页面无法加载,因为它在CSS链接处停止:<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="en"> <head> <meta content="text/html;charset=ISO-8859-1" http-equiv="content-type"> <link rel="stylesheet" type="text/css" href=" - Giuseppe Morelli
请编写您的头文件视图文件。也许我们可以找到一些错误:) - Giuseppe Morelli

2
一些服务器不支持所谓的短标记,因此建议您完全写出它们。除此之外,您必须加载URL助手才能在视图中使用base_url()
只需将$this->load->helper('url');添加到构造函数或任何您加载模型等的位置即可。

1

这绝对不是Codeigniter的问题。我在我的视图中随处使用短标记而没有任何问题。

Codeigniter不像Django或Ruby那样“解析”视图。代码被执行为标准php。

你确定你没有在PHP配置中禁用短标记吗?我敢打赌这就是问题所在。如果不是,你可能没有使用正确的语法。


我并不认为这是Codeigniter的问题,只是一种可能性。 - Marshall Davis

1

Codeigniter可以即时重写短标签。在application/config/config.php中查找“Rewrite short tags”。


0
无论在CodeIgniter中的设置如何,PHP都需要允许短标签。
在php.ini中设置:
short_open_tag=On

重启Apache。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接