【问题标题】:What's the correct way to include PHP from an SSI从 SSI 包含 PHP 的正确方法是什么
【发布时间】:2010-12-16 17:53:30
【问题描述】:

我正在开发一个使用多个 SSI 的网站。由于这些是静态的,因此将页面作为 .shtml 提供而不是转换为 php 包含并作为 .php 提供是有意义的。现在的问题是,在其中一个包含中,我想用 php 动态生成一些内容。以下是正确的方法还是有其他/更好的解决方案。我现在正在做的是:

<!--test.shtml-->
<!DOCTYPE html>
<html lang="en" dir="ltr">
<body>
<!--#include virtual="/test.php" -->
</body>
</html>

<!--test.php-->
<?php echo 'Hello from php'; ?>

我读到这不应该工作,但我读到的地方,它指的是 Apache 1.3。在我家的服务器上,我正在运行 Apache 2.[something] 并且它运行良好,它也适用于将托管该站点的服务器。那么这是不是在 1.3 中不起作用但在 2 中起作用的东西,还是我只是以某种方式幸运并且真的应该以不同的方式来做呢?

我正在生成的内容只是在网站上的导航中添加一个 css 类/ID,以突出显示当前页面,所以 PHP 似乎有点矫枉过正,因为它在第一次生成后几乎是静态的,我我想可以在服务器上缓存 PHP 输出,但也许首先有更好的方法(?)。

感谢您的帮助。

编辑-不是答案,而是与我的替代方法问题有关。 我找到了一种可能更适合我的情况的方法(我不敢说更清洁,因为我确信可以争论直到奶牛回家)方法。由于我目前没有将 PHP 用于网站上的任何其他内容,因此我现在会坚持使用它。如Dan M here所述。

【问题讨论】:

  • @ajreal,谢谢,但在什么意义上?从某种意义上说,我可以通过更改 SSI 来更改每个页面上的内容。或者您是否建议我可以使用.shtml 动态生成内容。抱歉有点糊涂。我错过了一些基本的东西吗?
  • what is .shtml。包含 php 脚本被认为是动态的,无论 PHP 是否为静态 html
  • @ajreal。好的,酷,我明白你在说什么。谢谢。

标签: php ssi


【解决方案1】:

因为这些是静态的,所以有意义 将页面作为 .shtml 而不是 转换为 php 包含并用作 .php

好吧,既然您在这两种情况下都调用 PHP 引擎,并且在这两种情况下都需要解析整个页面,所以将其作为 .php 页面 可能更有意义保证它也可以在 Apache 1.x 服务器上运行。然后,您可以按照您的建议将缓存页面输出为 .html,并在 DirectoryIndex 中优先使用该扩展名。

【讨论】:

  • 将缓存页面返回为 .html 是个好主意。页面解析会发生这种情况吗?整个事情都必须被解析,我假设只有 php 文件会被解析并且它的输出返回到 SSI 包含被添加到页面中。
  • .shtml 页面必须经过解析才能找到 ssi 注释字符串,因此您不会避免使用任何一种方法进行解析。您可以使用输出缓冲将结果写入磁盘。 php.net/manual/en/book.outcontrol.php
  • 还有,如果先返回php,然后在html的上下文中解析,服务器怎么知道需要通过php运行页面。至少在家里,我的服务器没有设置为用 php 解析 .shtml。将 php 直接包含在 .shtml 中是行不通的。因此,如果在返回 php 后对其进行解析,则必须有一些逻辑表明我们已经包含了一个 php 文件,因此该页面现在应该被解析为 php.ini。当然,如果是这种情况,首先解析 php 并返回其输出会更有意义。
  • 抱歉,我的最后一条评论是您进来时写的。不过,我认为 SSI 解析比 PHP 解析更快(当然内存占用更少)。也许我只是天真。谢谢你的链接。
猜你喜欢
  • 1970-01-01
  • 2021-08-29
  • 2021-03-21
  • 2019-07-28
  • 2011-02-28
  • 2019-09-10
  • 2014-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多