我目前正在重组一些代码-和文件扩展名-并且我无法理解为什么此代码不再起作用,只是因为我更改了文件扩展名。我对PHP还是比较陌生,但是对HTML和CSS有相当的经验。显然我对文件扩展名和/或HTML中的PHP文件不了解。
这是我的情况。我有一个名为contact.php的文件,它是HTML,只有几个PHP include语句可将各种片段嵌入到我的网页中。我的其中一项包括:
这是页脚片段,该片段包含在网站的每个页面中:
<br>
<div id="footer">
<div class="row">
<div class="col" id="updated">
<?php include '%WestownFunctions.php'; ?>
<?php getLastUpdate(); ?>
</div id="updated">
<div class="col" id="copyright">
<?php getCopyright(); ?>
</div id="copyright">
</div class="row">
</div id="footer">
依次是%Westown.Functions.php:
<?php
function getLastUpdate() {
$filename = $_SERVER['PHP_SELF'];
echo "getLastUpdate() filename: " . $filename . " "; //temporary!
date_default_timezone_set('America/Toronto');
echo "This page, " . substr($filename,1) . ", was last updated on: " . date('M j Y \a\t H:i:s T.', getlastmod());
}
function getCopyright() {
$filename = $_SERVER['PHP_SELF'];
echo "getCopyright() filename: " . $filename . " "; //temporary!
date_default_timezone_set('America/Toronto');
echo "(c) " . date('Y', getlastmod()) . " - Westown";
}
?>
这一切都很好,就像这样:页面正确显示,包括页脚所需的所有内容。
我所做的更改是用服务器端包含替换contact.php中的PHP包含,使它们看起来都像这样:
<!--#include file='fragments/_footer.shtml' -->
我将 ALSO 重命名为contact.php,改为contact.html。
服务器端的工作正常,但有一个障碍:%WestownFunctions.php中的两个函数显然看不到$ _SERVER [PHP_SELF],因为当我在两个函数中都将$ filename变量回显时,它为空。我不明白为什么会遇到这种情况:%WestownFunctions.php 是一个PHP文件,而我所做的更改只是contact.php文件的文件扩展名和包含类型我在做。
有人可以解释我为什么遇到这个问题吗?
我知道一条古老的规则,说“如果某些东西行得通,那就不要解决”,但我正在尽力使代码尽可能遵循专业标准。我的印象是,不包含PHP的HTML文件具有.html扩展名是“更好”的选择。我设法通过使用SSI而不是PHP include来从原始contact.php中删除所有PHP,因此现在将文件扩展名更改为.html [在问题的原始版本中为“ .php”似乎很合逻辑,但这是不是我的意思]。但是这样做显然会破坏在包含的页面上调用的PHP。我应该将contact.html重命名回contact.php吗?我应该还原PHP包含而不是使用SSI吗?
答案 0 :(得分:1)
SSI将简单地提取文件并假定它是HTML的一部分;该文件中的所有PHP标记(即使以扩展名.php
命名)也将按原样提供给浏览器,服务器不会将其解释为PHP。
tl; dr:您需要放回PHP include
。