ob_get_contents打印php标签而不是执行PHP代码

时间:2013-12-02 22:15:26

标签: php string output-buffering

所以我有这段代码:

  $template_file = 'template.tpl.php';
  ob_start();                      // Start output buffering
  include "./$template_file";      // Include the template file
  $contents = ob_get_contents();   // Get the contents of the buffer
  ob_end_clean();                  // End buffering and discard
  return  $contents;

这就是template.tpl.php的样子:

<?=translate_string('A message to display to user')?>

然而,当我检查$ contents的内容时,不是显示'A message to display to user'而是显示<?=translate_string('A message to display to user')?> ...即。它完整​​地显示PHP代码而不是执行PHP代码,只返回执行代码的输出......

有什么可能导致这种情况的想法吗?

我正在使用Drupal 6

修改

看起来像short_open_tag设置是On ...还有其他任何可能吗?

如果我仍然可以使用<?=表示法而不使其<?php等,那将会很棒...因为它被广泛使用

进一步更新

看起来jszobody不再有进一步的贡献,如果有人知道除了short_open_tag设置之外可能会导致什么,请随时回答

thx to jszobody for short_open_tag贡献

1 个答案:

答案 0 :(得分:2)

您在模板代码中使用PHP短标签。如果您的服务器上没有启用它们,则不会被PHP解析,而是将其视为纯文本。

见这里:http://www.php.net/manual/en/ini.core.php#ini.short-open-tag

我将您的模板更改为:

<?php echo translate_string('A message to display to user'); ?>