【问题标题】:Can I include a PHP file in an SHTML file and store the result in a SHTML variable?我可以在 SHTML 文件中包含 PHP 文件并将结果存储在 SHTML 变量中吗?
【发布时间】:2011-08-24 20:50:38
【问题描述】:

我想在 SHTML 文件中包含一个 PHP 文件,并将结果存储在一个 SHTML 变量中,并根据结果包含不同的内容。

示例:
假设 PHP 脚本将以纯文本形式回显 0/1(取决于时间等)。然后在 SHTML 中,我想将该 PHP 文件的输出存储在 SHTML 变量中。然后如果存储在该变量中的值为 1,则包含 fileA.html,否则包含 fileB.html。

【问题讨论】:

  • 正如您从 tadywankenobi 的回答中看到的那样,这不是自然结合的。也许您可以使用 PHP 作为 SHTML 生成器或类似的工具,但要给出示例/答案,您应该尝试提供包含某些内容的 PHP 和 SHTML 部分的小示例。
  • @Zoolway 假设 PHP 脚本会以纯文本形式回显 0/1(取决于时间等)。然后在 SHTML 中,我想将该 PHP 文件的输出存储在 SHTML 变量中。然后如果存储在该变量中的值为 1,则包含 fileA.html,否则包含 fileB.html。

标签: php variables server-side-includes ssi shtml


【解决方案1】:

听起来不可能。 SHTML 使用不同的方法来解析代码,所以我认为 PHP 不会在页面上运行以将值返回给 SHTML。你为什么要这样做,为什么不直接使用 PHP?

【讨论】:

  • @tadywankenobi PHP 将以纯文本格式输出 1/0,因此无需解析代码。我在这里谈论 A LOT 的 shtml 页面。另外,我认为它们是 .shtml 以加快 Google 索引该网站或类似的东西
  • 啊,好吧,它已经是现有的内容了。我会推荐的是,在外部运行您的 php 代码以输出到另一个 shtml 文件并包含该文件。我知道这只是 1/0,但至少这样可以保持格式一致。
  • 您能详细说明一下吗?我需要根据 PHP 的输出做两件不同的事情。
  • 首先,无论网站是 PHP 还是 SHTML,Google 索引都没有关系。但是对于时间限制,我建议您创建一个可以访问的 PHP 文件,比如使用 AJAX 调用,它将返回您需要的值。事实上,通过这种方式,您可以跳过我前面提到的关于创建新 SHTML 的包含。这适合您的目的吗?任何东西,只是为了防止同时解析两种格式(PHP 和 SHTML)。它们是不同的技术,所以不应该一起运行......
  • @tadywankenobi 所以你的建议是保留 shtml 并添加一些调用 PHP 并根据结果执行操作的 JavaScript? IE。使用 JavaScript 作为中介?听起来不错。除非关闭了 JavaScript,否则不会调用 PHP 脚本并显示文件的其余部分。除非我让 JS 显示“此页面默认需要 Javascript”,并且如果 PHP 的结果是正确的,则让它输出内容。但是 Google 无法将内容编入索引
【解决方案2】:

假设您有一个 template.shtml 文件,其中包含文本 @@PHPVARHERE@@

用户拨打script.php?var=1。不是脚本加载 template.shtml 文件 (file_get_contents) 的内容并执行 str_replace 以将 @@PHPVARHERE@@ 替换为 $_REQUEST['var'](在本例中为 1)。

然后脚本将所有这些输出到file1.shtml。如果文件已经存在,则使用现有文件或覆盖它 - 在这种情况下发生的任何事情都是正确的。

所以脚本会在运行时动态创建相关的 shtml 文件。只需添加一个Header('Relocate: file1.shtml');,脚本就会将浏览器重定向到生成的文件。

这是我所理解的最接近的。

【讨论】:

  • 这是否意味着我不会将用户发送到 page234.shtml,而是将它们发送到 page234.php?然后根据 X 打印什么内容?如果我将文件用户的 go to 更改为 PHP,那么我不妨直接使用 PHP 并告诉服务器将 SHTML 视为 PHP。对不起,如果我的问题太混乱了
  • 基于变量包含另一个文档的简单切换对于 PHP 来说是一件容易的事,所以到目前为止,我现在完全确定您为什么要使用 SSI。这个答案说用户输入 script.php?var=**XX**。如果需要,该脚本会生成 pageXX.shtml 并重定向用户。通过这种方式,您可以获得所需的 page_something_.shtml 文件(如果有的话),但所有文件都由单个 PHP 脚本控制。在这种情况下,shtml 文件不应包含 PHP。如前所述,我仍然觉得您根本不需要 SSI/shtml 文档。
  • 我同意我们不应该使用 SSI。这就是它的完成方式,我正在尝试实现这个新功能,但我认为扩展名为 .shtml 的唯一 PHP 文件是最佳选择。谷歌太重要了;我们不想更改任何网址
  • 如果您希望旧 URL 仍然有效,请在您的网络服务器(希望是 Apache)上重写它们以映射到您的单个 PHP 脚本!
  • 然后可能在 IIS 上搜索 URL 重写 / 问一个新问题。您现有的 URL 中有某种逻辑吗?就像一个特殊的部分将成为您的 PHP 脚本的一个或多个变量。所以解决这个问题的方法是:编写一个好的单个 PHP 脚本,并通过 URL 重写将现有 URL 映射到脚本,这样其他页面(以及谷歌)上的现有链接就不会中断。
【解决方案3】:

答案似乎是

注意: 它可能应该仅使用 PHP 和服务器指令来实现,以将 .shtml 文件视为 PHP。

【讨论】:

    【解决方案4】:

    在 .shtml 页面上执行 PHP 的方法是修改您的 .htaccess 文件。该文件可能是隐藏的,因此根据您的 FTP 程序,您可能需要修改一些设置才能看到它。然后你只需要为 .shtml 添加这一行:

    AddType application/x-httpd-php .shtml
    

    如果你只打算在一页上包含 PHP,最好这样设置:

    <Files yourpage.shtml>
    AddType application/x-httpd-php .shtml
    </Files>
    

    此代码只会使 PHP 在 yourpage.shtml 文件上可执行,而不是在所有 shtml 页面上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-24
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      • 2013-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多