2010-12-16 93 views
0

我正在使用多个SSI的网站上工作。由于这些是静态的,因此将页面作为.shtml提供服务并且不转换为php包含并作为.php。现在的问题是,在其中一个包括我想用PHP动态生成一些内容。下面是正确的方式去做或者有其他更好的解决方案。我现在在做的是:从SSI包含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. [东西],它工作正常,它也可以在托管该站点的服务器上运行。那么这是否在1.3版本中不起作用,但是在2版本中,还是在某种程度上我很幸运,真的应该以不同的方式做到这一点?

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

感谢您的帮助。

编辑 - 不是一个答案,而是关于我的替代方法问题。 我发现了一种可能更适合我的情况的方法(我毫不犹豫地说清洁剂,因为我确信可以争论到奶牛回家)。由于我目前没有在网站上使用PHP,所以我现在坚持使用它。正如Dan M here所述。

+0

仅供参考,'.shtml'不是静态的 – ajreal 2010-12-16 17:56:42

+0

@ajreal,谢谢,但在某种意义上?从某种意义上说,我可以通过更改SSI来更改每个页面上的内容。还是你建议我可以用'.shtml'动态生成内容。对不起,有点困惑。我错过了基本的东西吗? – tjm 2010-12-16 18:00:20

+0

[什么是.shtml](http://en.wikipedia.org/wiki/.shtml)。包括一个php脚本,不管PHP是否为静态html – ajreal 2010-12-16 18:02:06

回答

1

由于这些都是静态的很有道理 以服务页面作为的.shtml,而不是 转换到PHP包括和作为 .PHP

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

+0

这是关于将缓存页面作为.html返回的简单方法。这是关于页面解析会发生什么?整个事情将不得不被解析,我认为只有PHP文件将被解析,并且它的输出返回到SSI包括被添加到页面。 – tjm 2010-12-16 18:17:23

+0

.shtml页面必须经过解析才能找到ssi注释字符串,因此您无法避免使用任一方法解析。您可以使用输出缓冲将结果写入磁盘。 http://php.net/manual/en/book.outcontrol.php – webbiedave 2010-12-16 18:26:08

+0

另外,如果PHP首先被返回,然后在html的上下文中被解析,那么服务器如何知道它需要运行该页面PHP。至少在家里,我的服务器没有设置解析.shtml与PHP。直接在.shtml中包含php不起作用。因此,如果PHP返回后得到解析,那么必须有一些逻辑继续说我们已经包含了一个php文件,所以现在应该将这个页面解析为php。当然,如果是这种情况,首先解析php并返回它的输出将更有意义。 – tjm 2010-12-16 18:28:53