【发布时间】:2015-03-26 21:04:55
【问题描述】:
我有 HTML 和 PHP 文件,其中包含我网站的“标题”HTML。在 HTML 文件中,我使用包含此标头
<!--#include virtual="/top.ssi" -->。
top.ssi 又包含其他文件:
<!--#include virtual="/navbar.ssi" -->
<!--#include virtual="/advertising/slider_advertising.ssi" -->
和 slider_advertising.ssi 包括:
<!--#include virtual="/advertising/advertising.php" -->
这是准备显示广告数据的关键文件。
从 HTML 文件运行时,上述所有内容都非常有效。
现在我有一些 PHP 驱动的网页 (Logon.php) 也想使用 top.ssi 显示网站的标题。此代码以:
开头 <!DOCTYPE HTML>
<html>
<head><title>Login to HVmusic</title>
<?php
virtual("/top.ssi");
...
这就是问题所在。virtual("/top.ssi"); 执行正常,但在遇到 top.ssi <!--#include virtual="/advertising/advertising.php" --> 中包含的 PHP 文件后停止执行。显示advertising.php 的输出,然后logon.php 的PHP 输出停止。所以输出停止,甚至没有显示整个标题。
如果我删除<!--#include virtual="/advertising/advertising.php" --> 的语句,那么logon.php 会正常显示它的页面(当然没有advertising.php 显示的那位标题)。所以这告诉我 PHP 在包含另一个 PHP 文件的 virtual() 文件中存在问题。
有没有办法解决这个问题?它是PHP中的一些已知限制吗?我已经在谷歌上搜索了两天,找不到关于这个问题的任何提及。感谢您提供的任何帮助。
【问题讨论】:
-
你应该重写它,让它在任何地方都使用 PHP 的
include。如果其中一种技术完全能够独立完成所需的工作,则不需要涉及两种不同的技术。 -
不建议混合使用 SSI 和 PHP。
virtual()调用将触发第二个 Apache 和 mod_php 进程,这不是很有效。此外,它将停止使用更多当前的 FCGI/FPM 设置。如果可行,请移至纯 PHPinclude()语句。