启用PHP解析器和Include语句

时间:2014-11-06 12:59:13

标签: php mysql .htaccess include shtml

我有一个现有的SHTML页面,其中包含一些用于菜单的INCLUDE语句。这运作良好。到目前为止,我的.htaccess文件看起来像:

Options +FollowSymLinks

我的Include声明如下:

<!--#include virtual="menu_primary.shtml" -->

我有新的需要在主页面添加一些PHP代码。 PHP代码查询Mysql数据库以返回单行。如果数据库中存在该行,我想在SHTML页面上显示它。如果该行不存在,则不执行任何操作。这是PHP代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<?php
$servername = "localhost";
$username = "myusername";
$password = "mypassword";
$dbname = "mydbname";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
$sql = "SELECT notice from notification where page = 'home'";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
    // output data of each row
    while($row = mysqli_fetch_assoc($result)) {
        echo "Message is: " . $row["notice"]. "<br>";
    }
} else {
    echo "";
}
mysqli_close($conn);
?> 
</body>
</html>

当我实现这个PHP代码时,页面似乎将大于号符号之后的所有内容解释为文本。当我发布该问题时,此论坛上有人建议更改.htaccess文件以包含PHP解析器。一阵子。我将.htaccess文件修改为如下所示:

Options +FollowSymLinks
<FilesMatch "\.(htm|html|shtm|shtml)$">
    SetHandler application/x-httpd-php5
</FilesMatch>

然而,当我这样做时,PHP代码工作正常,我在SHTML页面上显示数据库中的数据,但#Include语句不再有效。如何在同一个SHTML页面中同时启用PHP和#Include代码?非常感谢您对此的看法。

1 个答案:

答案 0 :(得分:0)

在PHP脚本中,您可以调用virtual函数来使用SSI

<?php
virtual('menu_primary.shtml');

这是一个非常古老的页面,更详细地讨论了这一点 http://www.zytrax.com/tech/php/php_ssi.htm