【问题标题】:Using PHP Virtual() to include another PHP file fails使用 PHP Virtual() 包含另一个 PHP 文件失败
【发布时间】: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 &lt;!--#include virtual="/advertising/advertising.php" --&gt; 中包含的 PHP 文件后停止执行。显示advertising.php 的输出,然后logon.php 的PHP 输出停止。所以输出停止,甚至没有显示整个标题。

如果我删除&lt;!--#include virtual="/advertising/advertising.php" --&gt; 的语句,那么logon.php 会正常显示它的页面(当然没有advertising.php 显示的那位标题)。所以这告诉我 PHP 在包含另一个 PHP 文件的 virtual() 文件中存在问题。

有没有办法解决这个问题?它是PHP中的一些已知限制吗?我已经在谷歌上搜索了两天,找不到关于这个问题的任何提及。感谢您提供的任何帮助。

【问题讨论】:

  • 你应该重写它,让它在任何地方都使用 PHP 的 include。如果其中一种技术完全能够独立完成所需的工作,则不需要涉及两种不同的技术。
  • 不建议混合使用 SSI 和 PHP。 virtual() 调用将触发第二个 Apache 和 mod_php 进程,这不是很有效。此外,它将停止使用更多当前的 FCGI/FPM 设置。如果可行,请移至纯 PHP include() 语句。

标签: php virtual


【解决方案1】:

感谢您的提示,这些提示澄清了我的想法。我刚刚将我的所有网页都转换为 PHP,这解决了这个问题。我的大部分页面已经是 PHP,所以转换 HTML 页面的工作并不多。我使用的所有包含文件都可以轻松转换为使用&lt;? php require "filename"; ?&gt; 而不是&lt;!--#include virtual="filename" --&gt;

潜在的问题可能与在 PHP 中运行的一些冲突有关,然后调用 virtual() 调用 apache 实例,然后调用另一个 PHP 实例来处理我使用的 PHP 包含文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多